Jes*_*mos 1 assembly kernel linux-kernel page-fault
在使用某些操作码反汇编的linux内核的页面错误处理程序中,我发现在x86架构上,CALL或0xE8指令偶尔会抛出写入错误,ESI和EDI都是NULL.我想知道是否有一个特定的原因,因为CALL占用一个内存地址,只是将EIP更改为该值,并且不需要页面,因为它只是EIP + relative_offset.如果有人能够清除它,将非常感激.
该call指令不仅仅是改变eip- 它还必须eip在该改变之前将当前(更新为指向下一条指令)写入堆栈.A jmp型指令会按照您的建议行事,但call稍有不同,因为您必须能够在ret以后的当前位置.
我不能确定,因为你没有给我们代码,完整的注册内容和页面表(这将是一个问题的大量信息),但在我看来最有可能的解释是堆栈是当前退出,需要重新买回来.
我最初想到的另一种可能性是你跳到的地址是非居民的,但我认为这不会导致call自身出错.
这会导致故障很快事后为CPU试图取出下一条指令,但我不认为这就是你的描述表示,因为:
call; 和该esi和edi值是一个非问题-他们采取不参与一个call.
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |