【问题标题】:Is there any disassembler which generates compilable assembly source code?是否有任何反汇编程序可以生成可编译的汇编源代码?
【发布时间】:2011-05-09 12:53:16
【问题描述】:

我想知道,有没有Windows平台的反汇编器(软件)可以生成汇编源代码,也可以由汇编器编译?

既然反汇编程序可以根据EXE文件生成汇编代码,那么是否可以直接将汇编代码作为源代码,然后通过NASM之类的汇编程序编译源代码?

【问题讨论】:

    标签: windows assembly disassembly


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,所有的答案对我的知识都很有价值。
    【解决方案2】:

    我认为 IDA 在这方面做得很好。

    不管怎样,主要问题是生成的汇编代码非常不可读并且很难维护(没有变量名、函数名和签名),所以虽然从技术上讲它是 ASM 代码,但还是使用 IDA 更好作为聪明的编辑来推断这些信息。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        objconv 反汇编器可以生成 masm、nasm、yasm 和 gas 语法的汇编代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-29
          • 2015-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-14
          • 2017-08-17
          • 2014-10-29
          相关资源
          最近更新 更多