GNU binutils工具集

objdump 反彙編各種格式的目標文件和可執行程序
eg.objdump  [option(s)] [file(s)]
常用選項:
     -d 只反彙編代碼段
     -D 反彙編代碼段和數據段
     -S 混合輸出源代碼和彙編代碼,編譯時必須加-g選項

 

 

readelf 顯示ELF格式文件信息
eg.objdump  [option(s)] elf-file(s)
常用選項:
    -e 顯示頭信息,包括ELF file header、section header、program header
    -s 顯示符號列表信息
    -r 顯示重定位信息
    -a 顯示所有信息

 

 

strip    刪除出入文件的符號表和指定的section
eg.objdump  [option(s)] in-file(s)
常用選項:
    -o 指定輸出文件名

 

 

ar     管理歸檔文件(*.a)
 常用命令:
        d m q r t x
分別用於刪除、移動、添加、替換、顯示、去除歸檔文件的內容
eg.
       ar x /usr/lib/libc.a 取出libc.a中的而所有目標文件(*.o)到當前目錄
       ar q libmy.a obj1.o obj2.o 將obj1.o和obj2.o加入到libmy.a中

 

nm    顯示文件的符號信息,可以用於各種目標文件、可執行程序和歸檔文件(.a)
eg.
    nm  /usr/lib/libc.a > symbol   輸出如下信息
              nm: udiv_qrnnd.o: no symbols
              nm: old_atexit.o: no symbols
              nm: mp_clz_tab.o: no symbols
              nm: strncmp.o: no symbols
              nm: memcpy-ssse3.o: no symbols
              nm: mempcpy-ssse3.o: no symbols
              nm: memcpy-ssse3-rep.o: no symbols
              nm: mempcpy-ssse3-rep.o: no symbols
              nm: strncmp-ssse3.o: no symbols
              nm: strncmp-sse4.o: no symbols
              nm: strpbrk-c.o: no symbols
              nm: getopt_init.o: no symbols
              nm: init-posix.o: no symbols
              nm: lseek64.o: no symbols
              nm: oldgetrlimit64.o: no symbols
              nm: internal_accept4.o: no symbols
              nm: internal_recvmmsg.o: no symbols
              nm: getutmpx.o: no symbols

 

 

ldd     輸出動態鏈接誒庫程序的共享庫依賴關係
eg.ldd  /bin/ls
        linux-gate.so.1 =>  (0x00d92000)
        libselinux.so.1 => /lib/libselinux.so.1 (0x00420000)
        librt.so.1 => /lib/librt.so.1 (0x005ac000)
        libacl.so.1 => /lib/libacl.so.1 (0x00bc6000)
        libc.so.6 => /lib/libc.so.6 (0x00da3000)
        libdl.so.2 => /lib/libdl.so.2 (0x00503000)
        /lib/ld-linux.so.2 (0x006cc000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00110000)
        libattr.so.1 => /lib/libattr.so.1 (0x005bc000)
 


gprof     根據程序執行產生的數據gmon.out輸出profile信息,包括每個函數執行時間、所佔比例、調用關係等。
                    可用於分析程序的關鍵代碼,指導程序員進行優化
使用方法:
編譯:加  -pg選項
         執行:產生gmon.out(二進制數據)
         顯示:gprof  program_name > output
 

gcov     另一個profiling工具,可以分析程序一次執行過程中每行源代碼的執行數量、branch跳轉情況等
                  可應用於分析程序關鍵代碼和構造testsuite 源代碼在gcc的包中,不屬於binutils
使用方法:
       編譯:加  -fprofile-arcs  -ftest-coverage選項,最好不加優化選項
       執行:針對每個sourcefile產生sourcefile.bb、sourcefile.bbg、sourcefile.da(二進制數據)
       顯示:gcov  sourcefile.c產生sourcefile.gcov

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章