0

假设我已经将一些随机地址加载0x00001234eax. 有没有办法在跳转到它或取消引用它之前测试这个地址是否有效/存在?还是我必须实现异常处理程序?

4

1 回答 1

2

当然,如果您的操作系统允许您接管页面错误机制,那很容易做到。ret只需实现您自己的故障处理程序,将指令临时存储在该地址,然后仅存储call到该位置。

您必须在处理程序中设置一个标志以指示它无效(用于编写ret或尝试执行它),并且如果它有效,您将需要替换原始内容。

或者,您可以遍历 IDT/GDT/LDT 表以查看您的地址是否存在于其中任何一个中。

祝你好运找到一个允许凡人完成其中任何一项的操作系统:-)

也许如果您能告诉我们您为什么要这样做,而不是仅仅假设这是实现您想要的最佳方式,我们可以考虑另一种解决方案。

于 2010-05-25T05:57:21.687 回答