→ mayasky:你有看過那篇被刪除的訊息嗎?我沒刪,詢問另位版主中 01/08 01:52
推 yvb:page fault時, a應該尚未被修改,也尚無法被修改,所以如何檢查? 01/08 02:10
→ yvb:如果就這麼return回去,仍會執行同指令,結果再度page fault吧. 01/08 02:13
回Y大的話,a 的確尚未修改。但是進page fault時候會傳入error code跟pt_regs
我可以根據error code判定是屬於哪一種情況。若a = 6 則 page fault 幫忙
把 a = 5 改成 a=6; 然後修改regs->ip(跳到a=5;這指令後面) 和 return.
※ 編輯: BitTorrent 來自: 36.224.96.66 (01/08 11:28)
推 sivle:我也沒刪。。。大家分享心得的 我不會刪掉才是 01/08 11:38
推 yvb:真奇怪, 有文章被系統暗黑掉了... @.@ 01/08 12:34
→ yvb:判斷page fault後續狀況的問題, 我以為會相當複雜, 而且會是 01/08 12:36
→ yvb: machine dependant; 最主要是要分析 ip 指向的指令做什麼... 01/08 12:37
→ yvb:比方 x86 的 mov 指令, 多種定址法的指令長度都不盡相同... 01/08 12:42
→ yvb:不知原PO是實作在什麼平台上, 有什麼kernel函式協助分析指令, 01/08 12:49
→ yvb:或是我想太多, 其實光就 pt_regs 就足以判斷? 01/08 12:51
我作在x86, 有mov有分 movl , movw 等等
我舉個例子
idt_table2[i].offset_low = 0xbeef;
77: 44 89 e6 mov %r12d,%esi
7a: 66 c7 03 ef be movw $0xbeef,(%rbx)
7f: 41 b8 ef be 00 00 mov $0xbeef,%r8d
85: 48 c7 c7 00 00 00 00 mov $0x0,%rdi
(unsigned long )((char *)(regs->ip+=5));
*(unsigned long *)address = value; //modified value
或者
idt_table2[i].offset_high = 0x12345678
7b: c7 43 08 78 56 34 12 movl $0x12345678,0x8(%rbx)
82: ba 78 56 34 12 mov $0x12345678,%edx
87: 48 c7 c7 00 00 00 00 mov $0x0,%rdi
8e: 31 c0 xor %eax,%eax
(unsigned long )((char *)(regs->ip+=7)); //由c7 43 數到ba共7個
*(unsigned long *)address = *(ggyy+1); //modified value
※ 編輯: BitTorrent 來自: 36.224.96.66 (01/08 16:03)
推 yvb:還有一些問題: (1) 造成 page fault 的是 userspace process 01/09 02:08
→ yvb: 還是 kernel thread? (2) handler改值前後, 需要切換 RO 嗎? 01/09 02:09
→ yvb: (3) 除了 mov, 其它如 add, xchg 等又是如何? 01/09 02:15
→ yvb:關於 x86 指令集分析的處理, 不知原PO是自行包辦, 01/09 02:19
→ yvb: 或是如何叫用 kernel 哪些函式來協助完成? 01/09 02:20
推 yvb:問題 (1) 應改為 造成 page fault 的是 kernel thread, 01/09 12:49
→ yvb: process 的 user space 或 kernel space ? 01/09 12:49
推 yvb:此外還有更複雜的情況, 比方 a 為 int, 那麼 01/09 12:56
→ yvb:*(((char *)&a)+2)=1 或是 *(int *)(((char *)&a)-2)=-1 之類. 01/09 12:58
→ yvb:當然, 如果一堆變數 b, c, ... 都和 a 同 page 時, 那效能... 01/09 13:02
(1) 一個system call by user mode
(2) 需要切換 RO
(3) 我都是objdump去看他,所以再複雜的情況,應該都可找出關鍵的assembly code
same page 我到沒有想過~~
※ 編輯: BitTorrent 來自: 114.25.193.147 (03/17 11:01)