例如,在以下反汇编中:

.text:007C6834 014                 mov     eax, [esi+4]
.text:007C6837 014                 mov     dword ptr [esi], offset ??_7CAvatar@@6B@ ; const CAvatar::`vftable'


如何将esi寄存器的类型设置为结构,以便在理想情况下反汇编会变成:

.text:007C6834 014                 mov     eax, [esi.field_04]
.text:007C6837 014                 mov     dword ptr [esi.vtable], offset ??_7CAvatar@@6B@ ; const CAvatar::`vftable'


#1 楼


创建结构

以四种方式之一应用该结构:


使用T热键。
右键单击操作数并从“结构偏移”子菜单中选择结构。
菜单编辑|操作符类型|偏移|偏移(结构)
使用“操作数类型”工具栏上的相应按钮



这是一个简短的教程:https://www.hex-rays.com/products/ida/support/tutorials/structs.shtml

#2 楼

伊戈尔(Igor)是对的,这里是我必须提供的一些其他技巧。

在声明结构中的变量时,请确保您准确地容纳了变量的大小。例如,它是DWORD还是其他一些多字节缓冲区(在这些情况下,也许memset / memcpy可以为您提供有关其大小的线索)?

处理具有许多对象的结构时,准确地说明这些事情很重要。它可以帮助您全面了解程序中如何使用它,以及进一步定义结构成员

此外,请记住,您可以像在IDA中使用任何其他变量一样命名字段。为了更全面,您还可以在“结构”选项卡中声明字段类型,为此,右键单击该字段,然后选择字段类型。最后,在声明其中的多字节数组的大小时例如,在一个结构中,您实际上可以通过在数组大小字段中预先添加“ 0x”来以十六进制形式进行操作。看起来似乎不多,但这只是一个小技巧,可以派上用场。

关于IDA中的结构及其用途,还有很多要探索的内容。如果您想从总体上了解有关此内容和IDA的更多信息,那么我强烈推荐Chris Eagle的IDA Pro Book。

http://www.idabook.com/