汇编CALL指令,写错误?

| 在使用一些操作码反汇编的Linux内核的页面错误处理程序中,我看到在x86体系结构上,CALL或0xE8指令有时会引发写错误,并且ESI和EDI均为NULL。我想知道是否有特定的原因,因为CALL需要一个内存地址并将EIP更改为该值,并且不需要页面,因为它只是EIP + relative_offset。如果有人能解决这个问题,将不胜感激。     
已邀请:
        
call
指令不仅会更改change1ѭ,而且还必须在更改之前将当前的
eip
(更新为指向下一条指令)写入堆栈。您可以按照建议使用
jmp
型指令,但是
call
稍有不同,因为您以后必须能够
ret
到当前位置。 我不确定,因为您没有给我们代码,完整的寄存器内容和页表(这将是一个问题的大量信息),但是在我看来,最可能的解释是堆栈目前已关闭,需要重新购买。 我最初想到的另一种可能性是,您要跳转到的地址是非居民地址,但我不认为那会导致ѭ0本身出错。 此后,由于CPU试图获取下一条指令,这将很快导致故障,但是我认为这不是您的描述所指示的,因为: 您声明它正在ѭ0上发生;和 那将是读错误,而不是写错误。
esi
edi
的值是无效的-它们不参与
call
。     

要回复问题请先登录注册