中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. "); //-->

        博客專欄

        EEPW首頁(yè) > 博客 > objcpy,objdump,readelf,nm

        objcpy,objdump,readelf,nm

        發(fā)布人:電子禪石 時(shí)間:2021-04-24 來(lái)源:工程師 發(fā)布文章

        1. objcopy 復(fù)制及修改目標(biāo)文件
            -I  :   輸入文件的格式(binary, elf32-i386等)
            -O  :   輸出文件的格式
            -B  :   二進(jìn)制文件體系結(jié)構(gòu)(i386, arm等)

            -R  :   刪除不用的section(.comment  .note 等)
            -j  :   僅留下有用的section(.text  .data 等)
            -S  :   不復(fù)制重定位和符號(hào)信息
            -K  :   保留某個(gè)符號(hào)
            -N  :   去掉某個(gè)符號(hào)
            -L  :   使某個(gè)符號(hào)local化
            -W  :   使某個(gè)符號(hào)weaken化

            例如:  objcopy -S -O binary -j .text  a.out  a.bin   只保留.text的二進(jìn)制文件.


        2. objdump 顯示目標(biāo)文件信息
            -f  :   顯示文件頭信息(參考readelf -h)
            -d  :   反匯編目標(biāo)文件中需要執(zhí)行指令的section
            -D  :   反匯編目標(biāo)文件中所有的section
            -h  :   顯示section 頭信息(參考readelf -S)
            -x  :   顯示所有信息(參考readelf -a)
            -s  :   顯示各個(gè)section的十六進(jìn)制碼以及對(duì)應(yīng)的ascii碼
            -m  :   CPU架構(gòu)
            -b  :   目標(biāo)文件格式,默認(rèn)elf32,可以指定為binary二進(jìn)制格式.

            例如: objdump -D -b binary -m i386 a.bin  對(duì)二進(jìn)制文件進(jìn)行反匯編


        3. readelf 顯示目標(biāo)elf文件信息

            -a  :   顯示所有信息
            -h  :   顯示elf頭信息
            -l  :   顯示Program Header Table中的每個(gè)Entry信息
            -S  :   顯示Section Header Table中的每個(gè)Entry信息
            -g  :   顯示Section Group信息
            -s  :   顯示Symbol Table中的每個(gè)Entry信息
            -e  :   等同于 -h + -l + -s
            -n  :   顯示.note段信息
            -r  :   顯示可重定位信息

            -d  :   顯示Dynamic Section信息


        4. nm 列出目標(biāo)文件中的符號(hào)
            -a  :   列出所有符號(hào),包括debugger-only的符號(hào).
            -A  :   顯示文件名
            -g  :   只顯示外部符號(hào)
            -C  :   將低級(jí)符號(hào)解碼(demangle)成用戶級(jí)名字,使C++函數(shù)名具有可讀性.
            -D  :   顯示Dynamic符號(hào)
            -u  :   僅顯示沒(méi)有定義的符號(hào)
            -r  :   反序顯示
            -n  :   按地址順序顯示

          nm列出符號(hào)的地址,符號(hào)類型和符號(hào)名字.其中符號(hào)說(shuō)明如下:
            A   :   絕對(duì)地址,鏈接時(shí)不改變.
            B   :   符號(hào)位于bss數(shù)據(jù)段
            C   :   符號(hào)為common. common symbol是未初始化數(shù)據(jù)段(參考匯編文件中.common)
            D   :   已初始化數(shù)據(jù)段中的符號(hào)
            G   :   符號(hào)位于已初始化數(shù)據(jù)段中,重要用于small data object提高訪問(wèn)速度.
            I   :   該符號(hào)是對(duì)另一個(gè)符號(hào)的間接引用
            N   :   該符號(hào)是一個(gè)debugging符號(hào)
            R   :   只讀數(shù)據(jù)去符號(hào)(C語(yǔ)言中的const修飾)
            S   :   符號(hào)位于非初始化數(shù)據(jù)區(qū),用于small object
            T   :   符號(hào)位于text section
            U   :   符號(hào)未定義
            V   :   該符號(hào)是一個(gè)weak object
            W   :   弱符號(hào)
            ?   :   類型未定義




        objcopy使用說(shuō)明

        objcopy用于將object的部分或全部?jī)?nèi)容拷貝到另一個(gè)object,從而可以實(shí)現(xiàn)格式的變換。

        objcopy可用用于將文件轉(zhuǎn)換成S-record格式或者raw二進(jìn)制格式。

        例如,

                 xxxx-elf-objcopy –O srec test.o test.s19

        則將test.o轉(zhuǎn)換成s-record文件中。通常涉及到text段。

                 xxxx-elf-objcopy –O binary test.o test.bin

        則將test.o轉(zhuǎn)換成raw binary文件格式。

               當(dāng)將object文件轉(zhuǎn)換成raw binary格式時(shí),通常將去除掉symbols和relocation信息。在生成s-record過(guò)程中,有時(shí)需要用選項(xiàng)“-S”,“-R”去除掉binary文件,s-record文件不需要的相應(yīng)信息。

        此外,還需要注意到使用objcopy不能夠改變大、小endian。

         

        選項(xiàng)

        Desc

        infile/outfile

        源文件/目標(biāo)文件

        -I bfdname

        --input-target=bfdname

        輸入文件的bfdname,可取值elf32-little,elf32-big等,可用用objdump –I查看相應(yīng)的信息

        -O bfdname

        --output-target=bfdname

        輸出文件的bfdname

        -F bfdname

        --target=bfdname

        指定輸入、輸出文件的bfdname,目標(biāo)文件格式

        -j sectionname

        --only-section=sectionname

        只將由sectionname指定的section拷貝到輸出文件

        -R sectionname

        --remove-section=sectionname

        去除掉由sectionname指定的section

        -S

        --strip-all

        去掉源文件的符號(hào)信息和relocation信息

        -g

        --strip-debug

        去除掉調(diào)試符號(hào)信息和相關(guān)的段

        -K symbolname

        --keep-symbol=symbolname

        保留由symbolname指定的符號(hào)信息

        -N symbolname

        --strip-symbol=symbolname

        去除掉由symbolname指定的符號(hào)信息

        -G symbolname

        --keep-global-symbol=symbolname

        -L symbolname

        --localize-symbol=symbolname

        -W symbolname

        --weaken-symbol=symbolname

        -w

        --wildcard

        -x

        --discard-all

        -X

        --discard-locals

        處理符號(hào)

        -b byte

        --byte=byte

        每byteth byte中保留1 byte

        -i interleave

        --interleave=interleave

        每隔interleave字節(jié)拷貝1 byte

        --gap-fill val

        在section中填充val

        --set-start val

        設(shè)定新文件的start address

        --change-start incr

        --adjust-start incr

        調(diào)整start address

        --change-address incr

        --adjust-vma incr

        調(diào)整所有sections的VMA(virtual memory address)和LMA(linear memory address)。

        --change-section-address

                section{=,+,-}val

        --adjust-section-vma section

               {=,+,-}val

        調(diào)整指定section的VMA/LMA地址

        --set-section-flags section=flag

        指定指定section的flag,flag的取值可以alloc,contents, load, noload, readonly, code, data, rom, share, debug

        --add-section sectionname=filename

        添加一個(gè)section,該section的內(nèi)容為filenmae的內(nèi)容

        --rename-section oldname=

            newname[,flags]

        更改section的名

        -V

        --version

        objcopy的version number


        objdump命令的使用



        objdump命令是Linux下的反匯編目標(biāo)文件或者可執(zhí)行文件的命令,它還有其他作用,下面以ELF格式可執(zhí)行文件test為例詳細(xì)介紹:


        objdump -f test

        顯示test的文件頭信息


        objdump -d test

        反匯編test中的需要執(zhí)行指令的那些section




        objdump -D test

        與-d類似,但反匯編test中的所有section



        objdump -h test

        顯示test的Section Header信息



        objdump -x test

        顯示test的全部Header信息




        objdump -s test

        除了顯示test的全部Header信息,還顯示他們對(duì)應(yīng)的十六進(jìn)制文件代碼




        舉例:

        將C源代碼和反匯編出來(lái)的指令對(duì)照:

        1.

        編譯成目標(biāo)文件(要加-g選項(xiàng))

        gcc -g -o test.c


        2.

        輸出C源代碼和反匯編出來(lái)的指令對(duì)照的格式

        objdump -S test.o

        如下:




        如何對(duì)任意一個(gè)二進(jìn)制文件進(jìn)行反匯編?

        我們可以這樣做:

        objdump -D -b binary -m i386 a.bin

        -D表示對(duì)全部文件進(jìn)行反匯編,-b表示二進(jìn)制,-m表示指令集架構(gòu),a.bin就是我們要反匯編的二進(jìn)制文件


        objdump -m可以查看更多支持的指令集架構(gòu),如i386:x86-64,i8086等


        另外上面的所有objdump命令的參數(shù)同樣適用于arm-linux-objdump。


        同時(shí)我們也可以指定big-endian或little-endian(-EB或-EL),我們可以指定從某一個(gè)位置開(kāi)始反匯編等。所以objdump命令是非常強(qiáng)大的!


        readelf命令的使用  

        readelf命令是Linux下的分析ELF文件的命令,這個(gè)命令在分析ELF文件格式時(shí)非常有用,下面以ELF格式可執(zhí)行文件test為例詳細(xì)介紹:


        readelf -v

        顯示版本


        readelf -h

        顯示幫助


        readelf -a test

        顯示test的全部信息



        readelf -h test

        顯示test的ELF Header的文件頭信息(就是ELF文件開(kāi)始的前52個(gè)字節(jié))


        readelf -l test

        顯示test的Program Header Table中的每個(gè)Prgram Header Entry的信息(如果有)



        readelf -S test

        顯示test的Section Header Table中的每個(gè)Section Header Entry的信息(如果有)



        readelf -g test

        顯示test的Section Group的信息(如果有)


        readelf -s test

        顯示test的Symbol Table中的每個(gè)Symbol  Table Entry的信息(如果有)


        readelf -e test

        顯示test的全部頭信息(包括ELF Header,Section Header和Program Header,等同與 readelf -h -l -S test)



        readelf -n test

        顯示test的note段的信息(如果有)



        readelf -r test

        顯示test中的可重定位段的信息(如果有)



        readelf -d test

        顯示test中的Dynamic Section的信息(如果有)



        readelf -V test

        顯示test中的GNU Version段信息(如果有)


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



        關(guān)鍵詞: OBJCPY OBJDUMP

        技術(shù)專區(qū)

        關(guān)閉