【发布时间】:2011-05-09 12:53:16
【问题描述】:
我想知道,有没有Windows平台的反汇编器(软件)可以生成汇编源代码,也可以由汇编器编译?
既然反汇编程序可以根据EXE文件生成汇编代码,那么是否可以直接将汇编代码作为源代码,然后通过NASM之类的汇编程序编译源代码?
【问题讨论】:
标签: windows assembly disassembly
我想知道,有没有Windows平台的反汇编器(软件)可以生成汇编源代码,也可以由汇编器编译?
既然反汇编程序可以根据EXE文件生成汇编代码,那么是否可以直接将汇编代码作为源代码,然后通过NASM之类的汇编程序编译源代码?
【问题讨论】:
标签: windows assembly disassembly
IDA 可以生成源代码。但在大多数情况下,您无法对其进行编辑。假设如下代码:
loc_401020:
ret
; ...
dd 0FFFFFFFFh, 0, 1, 401020h, 0
; ^^^^^^^ can you find it in big real program?
到插入任何新字节都必须确保任何 sub_XXXX 或 loc_XXXX 将保持相同的偏移量,或者您必须替换其对标签的所有引用。
如果您不移动任何代码,则无需重新编译它 - 只需修补并可能扩展代码部分。
【讨论】:
我认为 IDA 在这方面做得很好。
不管怎样,主要问题是生成的汇编代码非常不可读并且很难维护(没有变量名、函数名和签名),所以虽然从技术上讲它是 ASM 代码,但还是使用 IDA 更好作为聪明的编辑来推断这些信息。
【讨论】:
我会直接在调试器中修补可执行文件,然后保存修改后的可执行文件。
反编译然后重新编译是一个脆弱的过程,因为重新组装代码的任何位置变化都会破坏程序。而且我认为某些 asm 指令有多种二进制表示形式,使事情变得更加复杂。
【讨论】:
在反汇编可执行文件时,您会丢失一些信息,因此在汇编反汇编文件时,您不太可能获得完全正常工作的可执行文件。如果你很聪明,你可以从一个可执行文件中提取单个函数,而不是整个程序。
objconv 反汇编器可以生成 masm、nasm、yasm 和 gas 语法的汇编代码。
【讨论】: