可能在 IDA 中使用负偏移量的结构

逆向工程 艾达 结构
2021-07-08 23:39:24

我有一个看起来像这样的结构:

 RefString struct
     RefCount dd ?
     StrLen   dd ?
     CString  db...
 RefString ends

当代码传递一个指针时,它不指向结构的开头 (RefCount),而是指向 CString,它被分配为具有零终止字符的普通 C-String,以及具有 strlen和一个refcount。因此,当代码访问 strlen 或 refcount 时,它ptr-4分别使用ptr-8

实际上这是一个很好的构造,因为这样字符串既可以用作delphistring,也可以直接传递给一些系统函数,而无需来回转换。

现在我想知道,是否可以在 IDA 中创建一个带有指向字符串的基指针的结构,并且它知道其他字段具有负偏移量。

1个回答

您所指的 ptr-4 和 ptr-8 实际上是堆栈上挑出的变量的位置。IDA 必须知道结构才能自动识别它。如果您在“结构”子视图中设置自定义结构。随后,您可以手动设置您选择的任何变量作为该特定变量的类型。此后,IDA 将用结构成员的适当偏移量替换反汇编视图中的引用。

如果 IDA“降落”在结构的中间。您可以按照以下解决方法使其以不同方式显示:

  1. 按 _(下划线)反转操作数符号
  2. 选择指令
  3. 按 T​​. 提供计算的增量,选择所需的结构及其字段

有关详情请咨询负结构偏移十六进制博客