【问题标题】:How to check that value stored in register is a valid address in the code segment如何检查存储在寄存器中的值是否是代码段中的有效地址
【发布时间】:2015-05-10 18:48:31
【问题描述】:

我正在 Windows 机器上编写一个小型 x86 汇编程序。有一次我想检查存储在 EDX 寄存器中的值是否是指向同一程序代码段的有效地址。谁能告诉我如何以及是否可以做到这一点?

【问题讨论】:

    标签: windows assembly x86


    【解决方案1】:

    在你的程序开始时,放一个这样的标签...

     The_Code_Starts_Here:
    

    在程序的最后,放一个这样的标签...

     The_Code_Ends_Here:
    

    在您想质疑该地址有效性的部分中,请执行以下操作...

     Cmp    Edx, The_Code_Starts_Here   ; Is it in the code segment ?
     Jb     Bombs_Away                  ; No, bomb out
    
     Cmp    Edx, The_Code_Ends_Here     ; Is it in the code segment ?
     Jae    Bombs_Away                  ; No, bomb out
    
                                        ; Else, good stuff, go on
    

    如果我搞砸了 JbJa 命名法,那就换掉它们吧。

    【讨论】:

    • 您最后的ja 应该是jae,因为地址 The_Code_Ends_Here 已经超出了代码部分。
    • 这并不能证明你有一个有效的代码指针,只能证明你有一个指向代码段的指针。它可以指向指令的中间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2014-09-11
    • 2011-12-29
    • 2013-05-14
    • 2017-04-23
    相关资源
    最近更新 更多