我“objdump -d”了一个可执行文件,例如 /bin/ls,我发现汇编代码中没有任何 main 函数。为什么?
问问题
1345 次
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
有几种可能的解释:
- 有问题的程序可能不是用 C 编写的。仅仅因为 C 需要 a
main
并不意味着世界需要一个。 - 通常,该
main
函数可能已被编译器内联或消除。操作系统只是调用一个入口点;它不关心这是否实际上是一个名为main
. - (我不确定
objdump
)Objdump
可能不会在程序中公开所有可能的符号;鉴于您将其指向链接的可执行文件而不是目标文件,因此 objdump 并没有真正的合同来告诉您可执行文件中的所有可能功能;只是那些可能被外部调用的。
符号信息只是助记符;处理器根本不看这些东西。
于 2011-09-02T22:14:08.977 回答