1

我“objdump -d”了一个可执行文件,例如 /bin/ls,我发现汇编代码中没有任何 main 函数。为什么?

4

2 回答 2

5

您可能会在大多数未删除的可执行文件中找到“main()”:

http://linux.die.net/man/1/strip

如果您运行以下命令,您可能还会看到类似的内容:

objdump -d /bin/ls|grep main 
objdump: /bin/ls: no symbols
于 2011-09-02T22:15:13.377 回答
3

有几种可能的解释:

  1. 有问题的程序可能不是用 C 编写的。仅仅因为 C 需要 amain并不意味着世界需要一个。
  2. 通常,该main函数可能已被编译器内联或消除。操作系统只是调用一个入口点;它不关心这是否实际上是一个名为main.
  3. (我不确定objdumpObjdump可能不会在程序中公开所有可能的符号;鉴于您将其指向链接的可执行文件而不是目标文件,因此 objdump 并没有真正的合同来告诉您可执行文件中的所有可能功能;只是那些可能被外部调用的。

符号信息只是助记符;处理器根本不看这些东西。

于 2011-09-02T22:14:08.977 回答