IDA/HexRays:如何检索与给定的反编译代码行关联的内存地址?

逆向工程 艾达 反编译 反汇编者 六线谱
2021-06-25 19:39:10

我试图通过在两者之间映射内存地址,以编程方式将 HexRays 生成的反编译代码与给定二进制文件的反汇编代码链接起来。映射存在,因为我可以通过 IDA 逐案查看(参见绿色反编译代码行,与金色内存地址相关联,这让我可以参考反汇编。单击不同的反编译源代码行链接到不同的内存地址/反汇编线集)。但是我找不到通过脚本(IDC、IDAPython 等)或命令行获取这些关联的任何方法。这让我感到很奇怪,因为我无法想象以前没有人发现或使用过此功能。

我的最终目标是能够读取一组反编译代码行号,然后返回映射到那些反编译代码行的所有反汇编行。

谢谢!

在此处输入图片说明

1个回答

hexrays.hpp,citem_tcinsn_t(“指令”,如for循环、if语句等)和cexpr_t(“表达式”,如加法、内存解引用、函数调用等)的基类citem_t都有一个字段ea_t ea;该字段存储汇编语言中相应行的地址(除非它是BADADDR,在这种情况下,反编译器机器丢失了地址的跟踪)。

为了具体地实现您的目标,您将希望获得cinsn_t反编译列表中某些行上的对象。以下是关于如何实现这一点的三个不同的想法:

  1. 直接把函数体抓出来cfunc_t自己处理;
  2. 使用一个ctree_visitor_t对象访问cinsn_t反编译列表中的所有对象;
  3. 调用kernwin.hpp::read_selection以获取反编译列表中的行选择(将这些行映射回反编译函数体内的位置需要做一些工作)。