- 論壇徽章:
- 36
|
(這個 - 6是什么意思,大家指點一下)
在地址0x0處埋下代碼kernel_code 函數(shù),因為0x90 = nop, 0xe9 = jmp
上面代碼可表示為在映射的地址0處,執(zhí)行
查了一下手冊。這里E9對應的jmp是相對跳轉(zhuǎn)。也就是jmp 后面跟的操作數(shù),應該是應跳轉(zhuǎn)到的地址和當前下一條指令地址之間的差值。
當前jmp下一條指令的地址應該是6, 所以jmp后面的操作數(shù)應該是&kernel_code -6.
也就是*(unsigned long *)2 = &kernel_code -6
見intel的手冊
E9 cw JMP rel16 A N.S. Valid
Jump near, relative,displacement relative to next instruction. Not supported in 64-bit mode.
E9 cd JMP rel32 A Valid Valid
Jump near, relative, RIP =RIP + 32-bit displacement sign extended to 64-bits |
|