如何检查我的堆、堆栈等位于内存的哪些部分?我目前正在查看 C 中的一个程序,在查看 .elf 文件时,我可以看到程序正在使用哪些内存地址,但我不知道它是在堆中还是在堆栈中。
问问题
320 次
3 回答
3
从编译代码本身的静态分析中很难知道这一点。您应该能够看到任何静态初始化的数据区域,以及静态未初始化 (BSS) 部分,但是这些相对于堆栈、堆等的加载方式取决于平台的可执行加载器。
于 2011-02-03T13:44:08.587 回答
0
如果您在嵌入式平台上工作,您可能应该在构建程序的同时使用一些链接器脚本(lcf 文件),然后您可以详细识别所有部分(堆栈、堆、intvec、bss、文本、代码)及其位置在内存中(无论是在 L1 缓存、L2 缓存还是 DDR 中)及其加载到电路板时的起始/结束地址。
问题是,请查看链接器手册(您可以在编译器安装目录中找到它)以正确理解 lcf 中的关键字。
还有另一种分析这些部分的方法,您可以为您的项目创建“地图文件”并通过它。它将列出程序中的所有部分及其地址。
于 2011-02-04T06:57:12.313 回答
0
您可以尝试使用ollydbg,这是一个免费的调试器。这样做的一个缺点是它以汇编形式显示所有内容,但它会显示堆栈、堆甚至寄存器中的内容。我不确定这是否是你要找的。
于 2011-02-05T05:45:44.107 回答