man*_*eka 2 c linker memory-management sparc rtems
我正在使用 SPARC RTEMS C 编译器编译 C 程序。
使用 Xlinker -M 选项,我可以获得包含很多我不认识的东西的大内存映射。
我也尝试过使用 RCC nm 实用程序,它返回一个更易读的符号表。我假设此实用程序为 printf 给出的位置是 printf 在内存中的位置,并且每个调用 printf 的程序都将在执行期间到达该位置。这是一个有效的假设吗?
有没有办法获得所有库/系统功能的位置列表?另外,当链接完成时,它是只链接可执行文件调用的函数,还是链接库中的所有函数?考虑到我在符号表和内存映射中找到的东西的数量,在我看来似乎是后者。我可以让它只链接所需的功能吗?
谢谢你的帮助。
大多数情况下,使用动态库时,该nm实用程序将无法为您提供确切答案。如今的二进制文件使用所谓的可重定位地址。这些地址在映射到进程的地址空间时会发生变化。
使用 Xlinker -M 选项,我可以获得包含很多我不认识的东西的大内存映射。
链接器映射通常包含所有符号——你的、标准库、运行时钩子等。
有没有办法获得所有库/系统功能的位置列表?
标题是查看的好地方。
另外,当链接完成时,它是只链接可执行文件调用的函数,还是链接库中的所有函数?
链接并不一定意味着将解析所有符号(即给定地址)。这取决于您创建的二进制文件的类型。
但是,一些编译器(例如 gcc)确实允许您是否创建不可重定位的二进制文件。(对于 gcc,您可以查看 exp 文件、dlltool 等。)查看相应的文档。
| 归档时间: |
|
| 查看次数: |
2762 次 |
| 最近记录: |