天天看點

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

繼續閱讀