为什么有些可执行文件没有 main 函数?

发布于 2024-12-03 06:15:29 字数 61 浏览 1 评论 0原文

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

I "objdump -d" an executable, e.g, /bin/ls, and I found there's not any main function in the assembly code. Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

厌倦 2024-12-10 06:15:29

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

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

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

objdump -d /bin/ls|grep main 
objdump: /bin/ls: no symbols

You'd probably find a "main()" in most executables that haven't been stripped:

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

You'd probably also see something like this if you ran the following:

objdump -d /bin/ls|grep main 
objdump: /bin/ls: no symbols
梦里兽 2024-12-10 06:15:29

有几种可能的解释:

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

符号信息只是助记符;处理器根本不考虑这些事情。

There are several possible explanations:

  1. The program in question may not be written in C. Just because C requires a main doesn't mean the world requires one.
  2. The main function may have been inlined or eliminated by the compiler in general. The operating system just calls an entry point; it doesn't care if that's actually the start of a function called main.
  3. (I'm not sure about objdump) Objdump might not expose all possible symbols in a program; given that you're pointing it at linked executable and not object files, there's not really a contract for objdump to tell you every possible function in the executable; just those which might be called externally.

Symbolic information are only mnemonics; the processor isn't looking at these things at all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文