【问题标题】:Get memory addresses using IDAPython使用 IDAPython 获取内存地址
【发布时间】:2015-05-06 23:57:24
【问题描述】:

在我的代码中,我使用idc.GetOpnd(ea,0)idc.GetOpnd(ea,1) 来获取一条指令的两个操作数。但是,如果它是call(或jmp)指令,我会得到_perrorloc_8083BA9 之类的符号。

使用 IDAPython,是否可以删除所有符号并仅处理内存位置。

【问题讨论】:

    标签: disassembly ida


    【解决方案1】:

    两种选择:

    1. 使用LocByName 将名称解析为地址
    2. 使用GetOperandValue 而不是GetOpnd 来获取操作数的值而不是其显示字符串。

    【讨论】:

    • 感谢您的回答。 GetOperandValue 适用于 calljmp 指令。但是,对于像 mov [esp+5Ch+handler],offset aNoCertificateP 这样的事情,我得到了 mov 4,136298879。这是不希望的。在这种情况下,我只想将handleroffset aNoCertificateP 解析为它们各自的内存位置。有可能吗?
    • 在您的示例中,handler 是一个堆栈地址。因此它没有真正的内存地址。 136298879 是 aNoCertificateP 的正确地址,只需将其以十六进制打印出来即可看到熟悉的表示。
    • 再次感谢,在我的示例中,处理程序是handler= dword ptr -58h。那么是否可以用-58h 替换handler。所以在原始操作数中,我得到类似[esp+5Ch-58h] 的东西。我认为这可以通过解析每个操作数并将vars 替换为相应的值来完成。但是,解析每个操作数的成本非常高,有什么“聪明”的方法可以做到这一点。谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多