nm
文章目錄
- 1nm
- 1.1 nm工具的用途使用
- 1.2 nm工具使用示例
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中的符號表:
最后看一看可執行程序中的符號表:
可執行文件中符號的地址不再是相對地址了,現在都變成了絕對地址了。
參考資料:
總結
- 上一篇: 我们的合租房怎么改中文模式?
- 下一篇: size