怎么用objdump和readelf计算各节可用内存比实际内存小空间大小

有时候需要去检查哪些代码调用叻某些接口但是经常发生的问题是,某些模块实际上看不到代码,只能看到库文件这种情况下,可借助GNU工具来检查

先写个简单的測试代码:

这个符号实际上是修饰过的,不太直观可以进一步处理:

3)如果 库文件是 debug版的(可以反汇编出源码),也可以用 objdump:

另外这些工具也可以查询某个模块定义哪些可供外部使用的符号。

如果是引用外部的符号符号前会有个 "U", 表示是未定义的;如果是本模块定义的符号,之前有个 "T",表示这个符号定义在这个模块所在文件的代码段.

本文是对中第3章的实践总结(和结構相关的示意图都是用画的?)通过使用工具readelf、objdump对目标文件进行解析,学习目标文件的结构

我们的代码是存放到.text中,已初始化全局变量和局部静态变量存放在.data中未初始化全局变量和局部静态变量存放在.bss中

程序与目标文件对应关系

另外,被初始化为0的静态变量也会被放入.bss段因为未初始变量的值也是0,经过优化后被放入.bss段这样可以节省磁盘空间,因为.bss不占磁盘空间

例如下面的代码中x1会被放入.bss段,而x2被放叺.data段

初始值为0的静态变量会被放进.bss

我要回帖

更多关于 内存 的文章

 

随机推荐