【发布时间】:2015-04-05 22:35:22
【问题描述】:
假设我们有一个使用大型库的 C 应用程序。 我试图找到一种方法来了解内存地址库函数和符号所在的位置。或者准确地告诉编译器/链接器将它们放在内存中的位置。方法是什么?
编辑:这是一个嵌入式应用程序,所以我不能使用桌面编译器工具链。
【问题讨论】:
-
您可以在可执行文件上运行一些工具以获取偏移量等。您可以在执行代码中说: int (pprinf)(const char) =打印; prinf 变量将包含 printf 函数的地址。
-
在运行时知道函数的地址和在构建过程中指示它的位置是完全不同的。我觉得您出于某些功能原因想要这个,下面提到的 gdb 之类的东西不能满足您的需求,但很难说。您能否详细说明您的需求?
-
您将需要指定嵌入式平台,以及您用于构建它的工具链。您尝试做的事情取决于平台、工具链、平台上的可执行文件格式以及其他一些东西。也就是说,除了在具有分区内存层次结构的机器上,控制库函数在内存中的位置(代码大小相同,并且可能消耗相同的资源)几乎没有什么好处。
-
感谢您的 cmets。假设我已将库图像下载到闪存。我想要实现的是拥有应用程序将要使用的所有库函数和符号的内存地址。我的工具链是 IAR8051,平台是基于 8051 的 SoC。将要下载的图像当然是二进制的。
标签: c memory linker memory-mapped-files