在装配中使用/跳转之前检查地址是否存在?

时间:2010-05-25 05:00:55

标签: assembly memory-address

假设我已将0x00001234之类的随机地址加载到eax。有没有办法在跳转到或解除引用之前测试该地址是否有效/存在? 或者我是否必须实现异常处理程序?

1 个答案:

答案 0 :(得分:2)

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

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

或者,您可以走IDT / GDT / LDT表,看看您的地址是否存在于其中。

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

也许如果你能告诉我们为什么你想要做到这一点,而不是仅仅假设这是达到你想要的最佳方式,我们可以想到另一个解决方案。