在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么快速把匯編代碼和C語言代碼對(duì)應(yīng)起來呢?

冬至子 ? 來源:Linux驛站 ? 作者:szyhb1981 ? 2023-06-12 16:45 ? 次閱讀

分析軟件缺陷,有時(shí)候需要把ELF文件反匯編為匯編代碼,然后分析匯編代碼,需要把匯編代碼和C語言代碼對(duì)應(yīng)起來。

如果一個(gè)函數(shù)比較長,那么人工把匯編代碼和C語言代碼對(duì)應(yīng)起來,費(fèi)時(shí)費(fèi)力。怎么快速把匯編代碼和C語言代碼對(duì)應(yīng)起來?

首先,編譯程序的時(shí)候使用選項(xiàng)“-g”生成調(diào)試信息

gcc test.c -o test.elf -g

執(zhí)行“readelf -S test.elf”,可以看到多個(gè)名稱以“.debug_”開頭的節(jié),如下。

$ readelf -S test.elf
There are 35 section headers, starting at offset 0x1508:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  ...
  [27] .debug_aranges    PROGBITS         0000000000000000  0000106b
       0000000000000030  0000000000000000           0     0     1
  [28] .debug_info       PROGBITS         0000000000000000  0000109b
       0000000000000173  0000000000000000           0     0     1
  [29] .debug_abbrev     PROGBITS         0000000000000000  0000120e
       0000000000000096  0000000000000000           0     0     1
  [30] .debug_line       PROGBITS         0000000000000000  000012a4
       0000000000000048  0000000000000000           0     0     1
  [31] .debug_str        PROGBITS         0000000000000000  000012ec
       00000000000000d2  0000000000000001  MS       0     0     1
  ...
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

使用objdump工具把ELF文件反匯編為匯編代碼的時(shí)候,使用選項(xiàng)“-S”把源代碼和匯編代碼混合,并且輸出到一個(gè)文本文件。

objdump -S test.elf > test_asm.txt

打開文本文件,下面是一個(gè)例子。

000000000040056a < func2 >:

void func2(int *ptr, int oldval, int newval)
{
  40056a: 55                    push   %rbp
  40056b: 48 89 e5              mov    %rsp,%rbp
  40056e: 48 83 ec 20           sub    $0x20,%rsp
  400572: 48 89 7d e8           mov    %rdi,-0x18(%rbp)
  400576: 89 75 e4              mov    %esi,-0x1c(%rbp)
  400579: 89 55 e0              mov    %edx,-0x20(%rbp)
    bool b;

    b = __atomic_compare_exchange_n(ptr, &oldval, newval,
  40057c: 8b 4d e0              mov    -0x20(%rbp),%ecx
  40057f: 48 8b 75 e8           mov    -0x18(%rbp),%rsi
  400583: 48 8d 55 e4           lea    -0x1c(%rbp),%rdx
  400587: 8b 02                 mov    (%rdx),%eax
  400589: f0 0f b1 0e           lock cmpxchg %ecx,(%rsi)
  40058d: 89 c1                 mov    %eax,%ecx
  40058f: 0f 94 c0              sete   %al
  400592: 84 c0                 test   %al,%al
  400594: 75 02                 jne    400598 < func2+0x2e >
  400596: 89 0a                 mov    %ecx,(%rdx)
  400598: 88 45 ff              mov    %al,-0x1(%rbp)
            false, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED);
    printf("b=%d\\n", b);
  40059b: 0f b6 45 ff           movzbl -0x1(%rbp),%eax
  40059f: 89 c6                 mov    %eax,%esi
  4005a1: bf 54 06 40 00        mov    $0x400654,%edi
  4005a6: b8 00 00 00 00        mov    $0x0,%eax
  4005ab: e8 60 fe ff ff        callq  400410 < printf@plt >
}
  4005b0: c9                    leaveq 
  4005b1: c3                    retq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7605

    瀏覽量

    136887
  • ELF文件
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7136
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問keil調(diào)試中如何通過黃色箭頭指向的匯編語言找到對(duì)應(yīng)C代碼

    keil調(diào)試中如何通過黃色箭頭指向的匯編語言找到對(duì)應(yīng)位置的C代碼
    發(fā)表于 12-25 09:06

    如何在底層編寫匯編代碼或者C語言代碼

    在2000年前后,嵌入式軟件工程師有著一套非常具體的技能,他們通常是電氣工程師,不僅了解底層硬件的工作原理,還可以在底層編寫匯編代碼或者C語言代碼
    發(fā)表于 12-15 06:28

    匯編代碼大全

    由3926個(gè)源代碼,包括8051/8096/8099/8048單片機(jī)匯編工具、匯編語言、摩托羅拉m68HC11、m680x0系列匯編語言、inter8051單片機(jī)
    發(fā)表于 04-04 23:54 ?211次下載

    報(bào)警產(chǎn)生器小程序 (C語言+匯編程序源代碼)

    報(bào)警產(chǎn)生器小程序 (C語言+匯編程序源代碼): 匯編代碼:flag  &
    發(fā)表于 09-13 14:58 ?91次下載

    匯編語言代碼分析

    匯編語言代碼分析 查看源代碼將發(fā)現(xiàn)它由4 4個(gè)文件組成,其中:• 兩個(gè)是匯編語言文件,它們的名字帶后綴“ . s”;• 28個(gè)是用“
    發(fā)表于 02-09 16:18 ?26次下載

    DSP編程技巧之鏈接匯編代碼C_C++代碼

    在DSP的開發(fā)中,常用的算法都可以用C/C++代碼來高效實(shí)現(xiàn)。但是對(duì)一些特殊寄存器的讀寫,例如某些CPU寄存器的讀寫,因?yàn)?b class='flag-5'>C/C++
    發(fā)表于 10-18 09:47 ?7次下載
    DSP編程技巧之鏈接<b class='flag-5'>匯編</b><b class='flag-5'>代碼</b>與<b class='flag-5'>C_C</b>++<b class='flag-5'>代碼</b>

    單片機(jī)流水燈匯編語言代碼大全(六款流水燈匯編語言代碼

    本文主要介紹了六款流水燈匯編語言代碼,具體的跟隨小編一起來了解一下。
    發(fā)表于 04-26 14:37 ?5.5w次閱讀

    單片機(jī)閃爍燈匯編語言代碼大全(四款閃爍燈的匯編語言代碼

    本文主要介紹了四款閃爍燈的匯編語言代碼,具體的跟隨小編一起來了解一下。
    發(fā)表于 04-26 14:47 ?2.5w次閱讀

    C匯編代碼結(jié)合 是實(shí)現(xiàn)DSP軟件設(shè)計(jì)的最好方式

    眾所周知,匯編語言具有更高的性能優(yōu)勢(shì),而用C語言編碼則能更容易和快速地實(shí)現(xiàn)。DSP處理器功能的不斷增強(qiáng)以及編譯器優(yōu)化技術(shù)的提高,使得傳統(tǒng)的用匯編語言
    發(fā)表于 01-31 17:11 ?2922次閱讀
    <b class='flag-5'>C</b>和<b class='flag-5'>匯編</b><b class='flag-5'>代碼</b>結(jié)合 是實(shí)現(xiàn)DSP軟件設(shè)計(jì)的最好方式

    CPU如何執(zhí)行代碼 匯編語言教程

    的是低級(jí)語言,它專門用來控制硬件。匯編語言就是低級(jí)語言,直接描述/控制 CPU 的運(yùn)行。如果你想了解 CPU 到底干了些什么,以及代碼的運(yùn)行步驟,就一定要學(xué)習(xí)
    的頭像 發(fā)表于 08-25 11:14 ?3570次閱讀
    CPU如何執(zhí)行<b class='flag-5'>代碼</b> <b class='flag-5'>匯編語言</b>教程

    C語言代碼中調(diào)用匯編函數(shù)需要注意什么

    除了匯編語言工程和C語言工程,許多嵌入式工程既包含C語言又包含匯編語言。由于Keil MDK的默
    的頭像 發(fā)表于 11-12 11:04 ?2835次閱讀

    C語言如何寫出高效代碼

    當(dāng)涉及復(fù)雜的高效C代碼案例時(shí),這些代碼示例展示了C語言中一些復(fù)雜且高效的應(yīng)用案例,涵蓋了排序算法、圖算法、位操作、文件操作、多線程編程等領(lǐng)域
    發(fā)表于 09-06 14:57 ?544次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>如何寫出高效<b class='flag-5'>代碼</b><b class='flag-5'>呢</b>?

    c語言怎么代碼全部注釋掉

    要將C語言代碼全部注釋掉,即不讓代碼被編譯和執(zhí)行,可以使用注釋語句來實(shí)現(xiàn)。C語言提供兩種注釋方式
    的頭像 發(fā)表于 11-22 10:21 ?7281次閱讀

    hex文件如何查看原c語言代碼

    是處理器可以直接執(zhí)行的指令,而 C 語言代碼則是人類可讀的高級(jí)編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對(duì)程
    的頭像 發(fā)表于 09-02 10:37 ?2335次閱讀

    TMS320LF240x DSP的C語言匯編代碼快速入門

    電子發(fā)燒友網(wǎng)站提供《TMS320LF240x DSP的C語言匯編代碼快速入門.pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:14 ?1次下載
    TMS320LF240x DSP的<b class='flag-5'>C</b><b class='flag-5'>語言</b>和<b class='flag-5'>匯編</b><b class='flag-5'>代碼</b><b class='flag-5'>快速</b>入門
    主站蜘蛛池模板: 夜夜爽夜夜爽| 狠狠色丁香久久婷婷| xxxx人成高清免费图片| 天天色综合3| 国产精品17p| 男人边吃奶边爱边做视频日韩| 亚洲狠狠婷婷综合久久久久图片| 天堂网在线资源| 国产精品一区二区三区四区五区| 欧美作爱福利免费观看视频| 亚洲国产精品婷婷久久久久| 亚洲免费影视| 中文字幕一精品亚洲无线一区| 在线亚洲一区| 全亚洲最大的777io影院| 韩国午夜精品理论片西瓜| 天天干天天在线| 欧美三级色图| 天天干夜夜谢| 久久国产高清字幕中文 | 男女视频在线观看免费| 国产yw.8825.c免费| 五月婷婷六月丁香激情| 国产福利在线免费| 欧美成人午夜片一一在线观看| 国产在线观看午夜不卡| 精品久久久久久午夜| 欧美色淫| 69日本xxxxxxxxx18| h在线观看视频免费网站| 男女视频在线看| 四虎影院官网| 三级第一页| 日本www.色| 男女爱爱福利| sihu永久在线播放地址| 成 人在线观看视频网站| brazzers720欧美丰满| www.四虎.com| 免费观看欧美成人1314色| 国产午夜爽爽窝窝在线观看|