c - ndisasm手册中提到的二进制文件和可执行文件有什么区别?

标签 c clang disassembly

我想用 clang 编译我的 C 文件,然后用 ndisasm 反编译它(用于教育目的)。然而,ndisasm 在它的手册中说它只适用于二进制 而不是可执行 文件:

   ndisasm only disassembles binary files: it  has
   no  understanding  of  the  header  information
   present in object or executable files.  If  you
   want  to disassemble an object file, you should
   probably be using objdump(1).

究竟有什么区别?当我用一个简单的 C 文件、可执行文件或二进制文件运行它时,clang 会输出什么?

最佳答案

目标文件包含机器语言代码、各种其他信息。听起来 ndisasm 只想要机器代码,而不是其他东西。因此,该消息告诉您使用 objdump 实用程序从目标文件中仅提取机器代码段。然后你大概可以在上面运行 ndisasm

关于c - ndisasm手册中提到的二进制文件和可执行文件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31126109/

相关文章:

c++ - 这个静态变量赋值给局部函数中的指针有什么问题?

c - BCD如何转换为十进制?

c - 需要在 Clang 中使用 -lm 和 pow(),而不是 sqrt()

c++ - Clang 和 GCC 之间的 const auto std::initializer_list 区别

iphone - 使用 otool 反汇编默认的 iOS 应用程序

由于破坏 C 中的 "object"而更改指针

c - 使错误别名为 undefined symbol devone_init

c++ - 为什么 clang 会忽略 __restrict__?

c - 我需要从可执行文件中恢复我的源代码

assembly - 为什么 objdump 显示此汇编语言指令的空操作码?