gpt4 book ai didi

assembly - 从设置 EIP=00000000 的指令中恢复

转载 作者:行者123 更新时间:2023-12-03 15:31:41 25 4
gpt4 key购买 nike

在处理一些 x86 asm 时,我想知道错误导致 EIP 被设置为 00000000 或另一个不存在的内存位置的情况。是否可以使用 SEH 或类似的错误处理机制捕获这些情况并恢复执行? (假设堆栈、堆和寄存器没有被破坏)

最佳答案

没有真正好的方法可以在它发生之前捕捉到它,但您可以尝试的一件事是检查堆栈(ESP 和/或 EBP 处的内存)和检查指向代码的指针。

如果导致这种情况的指令是一个调用,那么你很幸运 - ESP 处的双字将是返回地址,指向违规者之后。

如果它是一个 jmp,机会就更小了,但你仍然可以寻找可能的执行痕迹。

最坏的情况是,这是由 ret 和损坏的 ESP 引起的 - 通常此时堆栈完全是伪造的。您仍然可以检查其他寄存器的值,也许其中一个将包含一个指针,这可能会给您一些线索,并且您可以扫描整个堆栈区域以查找堆栈帧模式,如所述 in this post .

关于assembly - 从设置 EIP=00000000 的指令中恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com