是否有任何反汇编程序生成可编译的汇编源代码?

时间:2010-11-13 13:41:14

标签: windows assembly disassembly

我想知道,是否有任何Windows平台反汇编程序(软件)可以生成汇编源代码,这也是汇编程序可编译的?

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

4 个答案:

答案 0 :(得分:1)

我认为IDA对此非常擅长。

无论如何,主要的问题是生成的汇编代码将是非常难以理解的并且非常难以保留(没有变量名,函数名和签名),所以从技术上来说它是ASM代码,使用IDA仍然更好作为巧妙的编辑推断出这些信息。

答案 1 :(得分:1)

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

反编译然后重新编译是一个脆弱的过程,因为重新组装的代码的任何位置更改都可能破坏程序。而且我认为某些asm指令有多个二进制表示形式,这使得问题更加复杂。

答案 2 :(得分:1)

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

 loc_401020:
    ret

 ; ...

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

插入任何新字节都必须保证任何sub_XXXX或loc_XXXX将保持相同的偏移量,要么必须替换它对标签的所有引用。

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

答案 3 :(得分:1)

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

objconv反汇编程序可以用masm,nasm,yasm和gas语法生成汇编代码。

相关问题