2010-11-13 179 views
0

我想知道,有没有什么Windows平台拆装器(软件)可以生成汇编程序也可以编译的汇编源代码?是否有反汇编程序生成可编译的汇编源代码?

由于反汇编程序可以基于EXE文件生成汇编代码,汇编代码是否可以直接用作源代码,那么源代码可以由像NASM这样的汇编程序编译?

回答

1

IDA可以生成源代码。但在大多数情况下,您无法编辑它。假设下面的代码:

loc_401020: 
    ret 

; ... 

dd 0FFFFFFFFh, 0, 1, 401020h, 0 
;     ^^^^^^^ can you find it in big real program? 

插入给您的任何新的字节数必须是舒尔任何sub_XXXX或loc_XXXX将保持在相同的偏移,要么你必须更换其所有引用的标签。

如果您不移动任何代码,则不需要重新编译它 - 只需修补并可能扩展代码部分。

+0

谢谢,所有的答案对我的知识都很有价值。 – Allen 2010-11-15 06:05:39

1

我认为IDA在这方面相当出色。

无论如何,主要的问题是生成的汇编代码会非常难以读取并且很难保存(没有变量名称,函数名称和签名),所以从技术上讲这是ASM代码,它仍然更好使用IDA作为聪明的编辑推断这些信息。

1

我会直接在调试器中修补可执行文件,然后保存修改后的可执行文件。

反编译然后重编译是一个脆弱的过程,因为重组代码的位置改变会破坏程序。而且我认为某些汇编指令有多个二进制表示可能会使问题更加复杂化。

1

反汇编可执行文件时,您正在丢失一些信息,因此在组装反汇编时,您不太可能获得完整的可执行文件。如果你很聪明,你可以从可执行文件中提取单个函数,但不是整个程序。

反汇编器objconv可以在masm,nasm,yasm和gas语法中产生汇编代码。