gpt4 book ai didi

c - 如何获取库函数的内存位置?

转载 作者:行者123 更新时间:2023-12-02 15:42:57 30 4
gpt4 key购买 nike

我正在使用 SPARC RTEMS C 编译器编译 C 程序。

使用 Xlinker -M 选项,我能够获得包含很多我不认识的东西的大内存映射。

我也尝试过使用 RCC nm 实用程序,它返回一个稍微更易读的符号表。我假设此实用程序为 printf 提供的位置是 printf 在内存中的位置,并且每个调用 printf 的程序都将在执行期间到达该位置。这是一个有效的假设吗?

有没有办法获得所有库/系统函数的位置列表?另外,链接完成后,它是只链接可执行文件调用的函数,还是链接库中的所有函数?考虑到我在符号表和内存映射中找到的东西的数量,在我看来是后者。我可以让它只链接所需的功能吗?

感谢您的帮助。

最佳答案

大多数情况下,当使用动态库时,nm 实用程序将无法为您提供准确的答案。现在的二进制文件使用所谓的可重定位地址。这些地址在映射到进程的地址空间时会发生变化。

Using the Xlinker -M option, I am able to get a large memory map with a lot of things I don't recognize.

链接器映射通常包含所有符号——您的、标准库、运行时 Hook 等。

Is there any way to get a list of locations for all the library/system functions?

标题是查看的好地方。

Also, when the linking is done, does it link just the functions that the executable calls, or is it all functions in the library?

链接并不一定意味着所有符号都将被解析(即给定一个地址)。这取决于您创建的二进制文件的类型。

但是,有些编译器(如 gcc)允许您是否创建不可重定位的二进制文件。 (对于 gcc,您可以检查 exp 文件、dlltool 等)检查相应的文档。

关于c - 如何获取库函数的内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702097/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com