我正在拆解一个旧的(1996年)游戏,该游戏已使用Watcom 386编译器进行了编译。如下面的汇编代码所示,此编译器似乎在积极地对指令进行重新排序以更好地利用处理器管道:

下次通话的参数;带有蓝点的指令完成了上一次调用返回的对象的初始化。重新排列它们可以使程序集更易于阅读:

-bx-stack,这样我也可以在此处看到参数的顺序)

是否可以在IDA中完成此操作?我不是在要求一种算法来自动确定哪些指令应该是“红色”,哪些应该是“蓝色”,并且我不想修补原始二进制文件,我只是想手动重新排列指令在ida数据库中。

或者还有另一种方法可以提高这种代码在IDA中的可读性?

评论

您可以编写IDC / IDAPython脚本来移动选定的指令,例如:选择指令序列,调用脚本,输入字节数以上下移动这些指令,脚本使用PatchByte或类似命令对它们重新排序。

我前段时间编写了一个idc脚本来为手臂代码做此操作:swapinsn.idc。它将向上或向下旋转一系列insn,并修复该范围内的任何相对跳跃

@WillemHengeveld:你能回答这个吗?这是我需要的90%,我想将代表积分奖励给您。

#1 楼

几年前,我编写了swapinsn.idc为ARM代码执行此操作。它将向上或向下旋转insns序列,并修复该范围内的所有相对跳转。 br />为方便起见,我在hotkeys.idc中定义了热键功能HK_ExchangeDownHK_ExchangeUp。 br />

评论


顺便说一句,我现在没有笔记本电脑,下周我可能会增加对x86的支持

–威廉·亨格维尔德(Willem Hengeveld)
2014年8月22日12:36