为什么简单的 x86 指令会混淆 IDA Pro

逆向工程 艾达 拆卸
2021-06-15 13:37:42

您能解释一下为什么 IDA-Pro 会与以下简单的x86 指令混淆吗?

...
.text:0000000000001885   jnz     loc_1AD0
.text:000000000000188B loc_188B:
.text:000000000000188B   mov     byte ptr [var+9], 1
.text:000000000000188B some_func endp ; sp-analysis failed
.text:000000000000188B
.text:000000000000188B ; ---------------------------------------------------
.text:0000000000001890                 db 4Ch
.text:0000000000001891 ; ---------------------------------------------------
.text:0000000000001891
.text:0000000000001891 _debug_info_seg_0:
.text:0000000000001891   mov     eax, esp
.text:0000000000001893   cmp     rbx, 20h
...

这种混乱迫使我手动将不正确的数据重新定义为代码,然后重新定义子程序以修复错误计算的 endp 位置。

...
.text:0000000000001885   jnz     loc_1AD0
.text:000000000000188B loc_188B: 
.text:000000000000188B   mov     byte ptr [r14+9], 1
.text:0000000000001890   mov     rax, r12              <<<FIXED!>>>
.text:0000000000001893   cmp     rbx, 20h
.text:0000000000001897   jb      loc_1A80e
...

该问题在其他简单的 x86-x64 指令中多次发生。知道为什么吗?以及如何自动纠正这些?

2个回答

IDA 的自动分析器将用户定义的名称视为代码或数据项开始的有力指标。由于您_debug_info_seg_0在可能的指令中间符号,IDA 停止反汇编而不是删除符号。您可以编写一个脚本来删除此类阻碍符号并重新创建说明。

总之,区分代码和数据是一个不可判定的问题具体来说,您的问题是这个问题的一个特例,您可以在其中找到详细解释的答案。