Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我已经将一些随机地址加载0x00001234到eax. 有没有办法在跳转到它或取消引用它之前测试这个地址是否有效/存在?还是我必须实现异常处理程序?
0x00001234
eax
当然,如果您的操作系统允许您接管页面错误机制,那很容易做到。ret只需实现您自己的故障处理程序,将指令临时存储在该地址,然后仅存储call到该位置。
ret
call
您必须在处理程序中设置一个标志以指示它无效(用于编写ret或尝试执行它),并且如果它有效,您将需要替换原始内容。
或者,您可以遍历 IDT/GDT/LDT 表以查看您的地址是否存在于其中任何一个中。
祝你好运找到一个允许凡人完成其中任何一项的操作系统:-)
也许如果您能告诉我们您为什么要这样做,而不是仅仅假设这是实现您想要的最佳方式,我们可以考虑另一种解决方案。