说我有一个简单的nasm程序来打印你好!当然是在intel语法中,当我组装它(用-f elf)和用ndisasm进行diassemble时它完全不同!为什么它不能反汇编回我的hello world程序的简单格式?是不可能的?
答案 0 :(得分:2)
如果您尝试从程序集中恢复原始源代码,请忘记它。特别是对现代编译器进行了大量优化。
根据我对反汇编程序的经验,您可以获得一些半可读代码,但仅限于程序相对简单。
答案 1 :(得分:1)
在汇编过程中,所有汇编指令,注释,标签名称,行号和空格(制表符和空格)都会丢失。而且,反汇编程序无法确切知道哪些部分是代码,哪些部分是数据。因此,反汇编必须试探性地将可能的机器代码转换为汇编器指令,并发明新的标签名称(或仅使用数字引用存储)。
第一个例外是当模块导出标签时,这些标签包含在目标文件输出中,并且可以由反汇编程序使用。
第二个例外是调试信息可能存在于目标文件或链接的可执行文件中,或存在于引用该可执行文件的单独文件中。其中可以包括引用原始来源的标签名称和行号。