arg_0= dword ptr 4 ;struct passed in
push ebx
push ebp
mov ebp, [esp+8+arg_0] ; store pointer of struct in ebp
push esi
push edi
xor ebx, ebx
我不知道结构的大小,但是我看过
[ebp+0f14h]
。因此,我定义了一个大小为0xF14
的自定义IDA结构。现在,我在将此自定义结构应用于此指针时遇到了麻烦。我尝试了Alt+Q
,然后选择了自己的自定义结构,但是它不起作用。输出窗口显示Command "DeclareStructVar" failed
我的自定义结构:
mov [ebp+0D4h], bl
mov [ebp+0F4h], bl
mov [ebp+114h], bl
xor eax, eax
mov [ebp+0B8h], eax
mov [ebp+0BCh], eax
mov [ebp+0C0h], eax
我正在使用IDA Pro 6.3
#1 楼
要将寄存器设置为汇编代码序列中结构的偏移量,您需要选择该序列,然后按T。将出现一个名为“ Structure offsets”的对话框,您可以在其中提供寄存器并对其进行结构指向,您将看到使用它识别出的所有IDA参考。以下面的摘录自calc.exe的代码段为例:
选择相关代码并单击自动识别的T IDA之后,我们将设置
ECX
寄存器,在左侧建议可能的有效结构以及偏移量和所选结构的值。 /> 分配有效的结构后,代码如下所示:
请注意以下注意事项/说明:
IDA完全忽略了
add ecx, 4
行,并且因此没有很好地处理mov [ecx+eax*2], dx
。为该特定行敲击T并提供非零偏移量增量将使您能够正确地进行处理,尽管需要手动进行。 如评论中所述,手动设置寄存器名称将完全禁用IDA对该寄存器的所有表示,而是显示用户提供的自由文本。这意味着任何偏移量定义都将被任何寄存器自定义名称隐藏。
如果您已经看到
[ebp+0f14h]
,则结构的大小至少为0xF15字节,因为该结构正在偏移量0x0F14
处写入,意味着至少0xF15字节可用。如果您已经看到DWORD [ebp+0f14h]
的结构至少为0x0F18
字节长。这些警告至少可以通过Autostruct等第三方工具得到部分缓解
评论
“但不起作用”-什么是“不起作用”?您不能告诉IDA“ ebp是结构指针”,并且使所有使用ebp的指令都自动使用该结构。您必须右键单击每个偏移量,从上下文菜单中选择“结构偏移量”,然后选择您的custom_struct字段。 (或者,作为快捷方式,使用T键。)
@JasonGeffner和@GuntramBlohm都感谢您的回答。应用“ T”操作后,IDA没有投诉。但是,自定义结构仍未显示。然后,我意识到我给ebp注册了一个自定义名称。在删除寄存器的自定义名称后,出现了custom_struct。
@GuntramBlohm,想要根据您的评论和我的想法创建一个新的答案吗?我很高兴您能获得这一荣誉;)
要添加到@GuntramBlohm的注释中:您还可以选择文本区域并按t。将出现一个不同的菜单,允许您选择一个寄存器(选择ebp)和一个结构(选择custom_struct),它将选择中每个ebp的偏移量转换为custom_struct的偏移量。这在线性视图中效果最好。