1

假设我有一个简单的 nasm 程序来打印你好!当然是 intel 语法,当我组装它(使用 -f elf)并使用 ndisasm 进行组装时,它完全不同!为什么它不能反汇编成与我的 hello world 程序相同的简单格式?不可能吗?

4

2 回答 2

3

如果您试图从程序集中恢复原始源代码,请忘记它。特别是对于进行大量优化的现代编译器。

根据我使用反汇编程序的经验,您可以获得一些半可读的代码,但前提是程序相对简单。

于 2010-08-15T03:36:06.007 回答
1

所有汇编器指令、注释、标签名称、行号和空格(制表符和空格)在汇编过程中都会丢失。更重要的是,反汇编器无法确切知道哪些部分是代码,哪些是数据。因此,反汇编必须启发式地将可能的机器代码转换为汇编指令,并发明新的标签名称(或仅使用对内存的数字引用)。

第一个例外是当模块导出标签时,这些标签包含在目标文件输出中并且可以被反汇编器使用。

第二个例外是调试信息可能出现在目标文件或链接的可执行文件中,或者在引用可执行文件的单独文件中。这可以包括引用原始源的标签名称和行号。

于 2019-08-28T20:48:24.453 回答