1nm
1.1 nm工具的用途使用
nm工具的用途及使用:
- 列出目标文件中的标识符(变量名、函数名)。
- 输出结构由三部分组成:{地址、段、标识符}。
- nm在编译时需要加-g选项。

段标识说明:

1.2 nm工具使用示例
有test.c和func.c两个文件,代码如下:
test.c:
#include <stdio.h>
int g_global = 0;
int g_test = 1;
extern int* g_pointer;
extern void func();
int main(int argc, char *argv[])
{
printf("&g_global = %p\n", &g_global);
printf("&g_test = %p\n", &g_test);
printf("&g_pointer = %p\n", &g_pointer);
printf("g_pointer = %p\n", g_pointer);
printf("&func = %p\n", &func);
printf("&main = %p\n", &main);
func();
return 0;
}
func.c:
#include <stdio.h>
int* g_pointer;
void func()
{
*g_pointer = (int)"D.T.Software";
return;
}
首先查看func.o中的符号表:

上面中g_pointer前面的8并不是指便宜地址,而是值当前变量占8个字节;对于func来说,0则是指func在代码段的偏移地址为0。
接下来查看test.o中的符号表:

最后看一看可执行程序中的符号表:

可执行文件中符号的地址不再是相对地址了,现在都变成了绝对地址了。
参考资料:
3948

被折叠的 条评论
为什么被折叠?



