我有一个小的函数,给它一个struct作为参数。 struct看起来像这样:

struct my_struct {
  short a;
  unsigned int b;
  unsigned int c;
};


注意对齐,我在IDA中构建了以下struct

field_0 +0x0
field_1 +0x4
field_2 +0x8


编译器对其进行编译,以使其在rbp+0x10中将struct作为第一个字段,将rbp+0x14作为第二个字段,依此类推。现在出现问题是因为,如果我尝试将预定义的IDA struct应用于指令,我总是会得到类似[rbp+struct.field_0+0x10]的信息。如果+0x10的结构中确实存在某些内容,则情况会变得更加复杂,因为这只会显示[rbp+struct_fieldX](这是错误的)。

问题是:有没有办法告诉IDA(我使用6.3)应用偏移为struct0x10

这个简单案例的肮脏技巧是创建一个struct,该size_tRIP具有2个SFP虚拟字段,但这似乎并不是正确的选择。

#1 楼

在结构的堆栈视图中添加结构:


将光标置于函数的反汇编视图中,按Ctrl + K打开堆栈视图。
在堆栈视图中,确保存在足够的函数参数以至少到达堆栈中的+00000010。使用D根据需要添加更多函数参数。
将光标定位在堆栈视图中的+00000010行上,然后按Alt + Q在该偏移量处指定my_struct

评论


重点说明:在第三步中,您必须处于堆栈视图上。如果将光标放在IDA视图中相应的局部变量上,然后按Alt + Q,则IDA会尝试将函数的内容解释为结构,而不是变量,这会破坏函数。我看到这是人们在学习IDA中的结构时经常犯的一个错误。

–user1354557
14-10-27在20:53