国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ARM Linux 系統(tǒng)穩(wěn)定性分析入門及漸進(jìn) 13 -- gdb 反匯編 disassemble 命令詳細(xì)介紹及舉例】

這篇具有很好參考價(jià)值的文章主要介紹了ARM Linux 系統(tǒng)穩(wěn)定性分析入門及漸進(jìn) 13 -- gdb 反匯編 disassemble 命令詳細(xì)介紹及舉例】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


請(qǐng)閱讀【ARM Linux 系統(tǒng)穩(wěn)定性分析專欄導(dǎo)讀】

1.1 gdb 調(diào)試回顧

在GNU調(diào)試器(GDB)中,有許多命令可以幫助我們調(diào)試應(yīng)用程序。
gdb: 這是一個(gè)強(qiáng)大的Unix下的程序調(diào)試工具。以下是使用gdb的一個(gè)簡(jiǎn)單示例:

$ gdb ./test

在這個(gè)例子中,我們啟動(dòng)了gdb并將我們的程序test作為參數(shù)傳遞。


可執(zhí)行程序 test 是由下面代碼使用gcc -g -O0 test.c -o test編譯出來:

#include<stdio.h>
#include<stdlib.h>

static int bar(void)
{
    char *p = NULL;

    printf("I am bar,I will core dump\n");
    printf("%s",p);
    *p =0x0;

    return 0;
}

static int foo(void)
{
    int i ;
    printf("I am foo,I will call bar\n");
    bar();

    return 0;
}

int main(void)
{
    printf("I am main, I wll can foo\n");
    foo();

    return 0;
}

1.1.1 gdb list 命令介紹

llist: llist 命令用于顯示當(dāng)前源代碼的行列表,包括當(dāng)前行以及周圍的幾行代碼。這對(duì)于查看代碼的上下文非常有用。

例如,你可以使用llist命令來顯示當(dāng)前行及周圍的10行代碼:

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) list 10
5       {
6           char *p = NULL;
7
8           printf("I am bar,I will core dump\n");
9           printf("%s", p);
10
11          *p = 0x0;
12
13          return 0;
14      }
(gdb)

這將顯示源代碼的當(dāng)前行周圍的文本。

1.2 反匯編命令 dis 介紹

dis/disassemble: 這個(gè)命令用于查看匯編代碼。例如,我們可以使用以下命令查看當(dāng)前函數(shù)的匯編代碼:

(gdb) disassemble

或者查看指定函數(shù)的匯編代碼:

[11:01:22]sam@codingcos-sam-laptop (*^~^*) ~/test> gdb test
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) dis foo
Bad breakpoint number 'foo'
(gdb)

從上面的信息可以看到gdb并沒有對(duì)函數(shù) foo 進(jìn)行反匯編,而是報(bào)出錯(cuò)誤“Bad breakpoint number ‘foo’”,甚是疑惑!??!, 網(wǎng)上搜了一大圈也沒找到原因!!

后來發(fā)現(xiàn)是在使用gdb時(shí)沒有設(shè)置斷點(diǎn)導(dǎo)致的,如果按照下面方式,則可以進(jìn)行反匯編

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) b foo
Breakpoint 1 at 0x11bd: file test.c, line 19.
(gdb) dis foo
Bad breakpoint number 'foo'
(gdb) disassemble foo
Dump of assembler code for function foo:
   0x00000000000011b5 <+0>:     endbr64
   0x00000000000011b9 <+4>:     push   %rbp
   0x00000000000011ba <+5>:     mov    %rsp,%rbp
   0x00000000000011bd <+8>:     lea    0xe5f(%rip),%rax        # 0x2023
   0x00000000000011c4 <+15>:    mov    %rax,%rdi
   0x00000000000011c7 <+18>:    call   0x1060 <puts@plt>
   0x00000000000011cc <+23>:    call   0x1169 <bar>
   0x00000000000011d1 <+28>:    mov    $0x0,%eax
   0x00000000000011d6 <+33>:    pop    %rbp
   0x00000000000011d7 <+34>:    ret
End of assembler dump.

但是目前還不清楚為何使用 dis 命令不生效。


如下是使用 arm gdb 的反匯編示例(前提要有arm gcc 編譯出來的 .o文件):

arm-none-eabi-gdb ./build/bsp/sam/sam_demo/common/soc.o
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-none-eabi".
Reading symbols from ./build/bsp/sam/sam_demo/common/soc.o...
(gdb) b reboot
Breakpoint 1 at 0x214: file /mnt/user_home/sam/rt-thread/bsp/sam/sam_demo/common/soc.c, line 36.
(gdb) disassemble reboot
Dump of assembler code for function reboot:
   0x00000208 <+0>:     push    {r7}
   0x0000020a <+2>:     sub     sp, #20
   0x0000020c <+4>:     add     r7, sp, #0
   0x0000020e <+6>:     mov     r3, r0
   0x00000210 <+8>:     str     r1, [r7, #0]
   0x00000212 <+10>:    strb    r3, [r7, #7]
   0x00000214 <+12>:    ldr     r3, [pc, #24]   ; (0x230 <reboot+40>)
   0x00000216 <+14>:    str     r3, [r7, #12]
   0x00000218 <+16>:    dmb     sy
   0x0000021c <+20>:    ldr     r2, [pc, #20]   ; (0x234 <reboot+44>)
   0x0000021e <+22>:    ldr     r3, [r7, #12]
   0x00000220 <+24>:    str     r3, [r2, #0]
   0x00000222 <+26>:    nop
   0x00000224 <+28>:    adds    r7, #20
   0x00000226 <+30>:    mov     sp, r7
   0x00000228 <+32>:    ldr.w   r7, [sp], #4
   0x0000022c <+36>:    bx      lr
   0x0000022e <+38>:    nop
   0x00000230 <+40>:    lsls    r3, r4, #12
   0x00000232 <+42>:    movs    r0, #33 ; 0x21
   0x00000234 <+44>:    asrs    r0, r0, #2
   0x00000236 <+46>:    mov     r1, r0
End of assembler dump.
(gdb)

另外一種查看匯編代碼的方式是使用 x 命令,如下顯示 pc 開始的 3 條指令:

Breakpoint 1, foo () at test.c:19
19          printf("I am foo,I will call bar\n");
(gdb) x/3i $pc
=> 0x5555555551bd <foo+8>:      lea    0xe5f(%rip),%rax        # 0x555555556023
   0x5555555551c4 <foo+15>:     mov    %rax,%rdi
   0x5555555551c7 <foo+18>:     call   0x555555555060 <puts@plt>
(gdb)

arm gdb 反匯編示例
查看0x0地址開始后面的10條匯編:

arm-none-eabi-gdb ./build/bsp/sam/sam_demo/common/soc.o
...
(gdb) x/3i 0x0
   0x0 <__NVIC_SetPriority>:    push    {r7}
   0x2 <__NVIC_SetPriority+2>:  sub     sp, #12
   0x4 <__NVIC_SetPriority+4>:  add     r7, sp, #0
(gdb) x/10i 0x00000000
   0x0 <__NVIC_SetPriority>:    push    {r7}
   0x2 <__NVIC_SetPriority+2>:  sub     sp, #12
   0x4 <__NVIC_SetPriority+4>:  add     r7, sp, #0
   0x6 <__NVIC_SetPriority+6>:  mov     r3, r0
   0x8 <__NVIC_SetPriority+8>:  str     r1, [r7, #0]
   0xa <__NVIC_SetPriority+10>: strh    r3, [r7, #6]
   0xc <__NVIC_SetPriority+12>: ldrsh.w r3, [r7, #6]
   0x10 <__NVIC_SetPriority+16>:        cmp     r3, #0
   0x12 <__NVIC_SetPriority+18>:        blt.n   0x2a <__NVIC_SetPriority+42>
   0x14 <__NVIC_SetPriority+20>:        ldr     r3, [r7, #0]
(gdb)

1.2.1 如何設(shè)置 gdb 匯編代碼的格式

GDB 主要支持兩種匯編代碼格式:

  • AT&T風(fēng)格:這是GDB的默認(rèn)匯編代碼格式,是在Unix和GNU系統(tǒng)中常見的格式。在AT&T風(fēng)格的匯編代碼中,操作數(shù)的順序是“,目標(biāo)”,立即數(shù)絕對(duì)地址值以美元符號(hào)"$"作為前綴,寄存器名稱以百分號(hào)"%"作為前綴。

  • Intel風(fēng)格:這是在Intel文檔和Windows環(huán)境中常見的格式。在Intel風(fēng)格的匯編代碼中,操作數(shù)的順序是“目標(biāo)”,立即數(shù)絕對(duì)地址沒有特殊的前綴,寄存器名稱也沒有特殊的前綴。

可以使用 show disassembly-flavor 命令查看當(dāng)前的匯編代碼風(fēng)格。例如:

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) dis foo
Bad breakpoint number 'foo'
(gdb) show disassembly-flavor
The disassembly flavor is "att".
(gdb)

可以看到默認(rèn)是 AT&T風(fēng)格。

如果你想要改變匯編代碼風(fēng)格,你可以使用 set disassembly-flavor 命令來設(shè)置新的風(fēng)格。例如,如果你想要設(shè)置成Intel風(fēng)格,你可以這樣做:

(gdb) set disassembly-flavor intel

如果你想要設(shè)置成AT&T風(fēng)格,你可以這樣做:文章來源地址http://www.zghlxwxcb.cn/news/detail-670611.html

(gdb) set disassembly-flavor att

到了這里,關(guān)于ARM Linux 系統(tǒng)穩(wěn)定性分析入門及漸進(jìn) 13 -- gdb 反匯編 disassemble 命令詳細(xì)介紹及舉例】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】排序算法的穩(wěn)定性分析

    【數(shù)據(jù)結(jié)構(gòu)】排序算法的穩(wěn)定性分析

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個(gè)人主頁 :阿然成長日記 ??點(diǎn)擊可跳轉(zhuǎn) ?? 個(gè)人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進(jìn)階 ?? 不能則學(xué),不知?jiǎng)t問,恥于問人,決無長進(jìn) ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 前言: 前面我們已經(jīng)

    2024年02月08日
    瀏覽(19)
  • 百度SEO優(yōu)化不穩(wěn)定的原因分析(提升網(wǎng)站排名的穩(wěn)定性)

    百度SEO優(yōu)化不穩(wěn)定的原因分析(提升網(wǎng)站排名的穩(wěn)定性)

    百度SEO優(yōu)化不穩(wěn)定介紹蘑菇號(hào)-www.mooogu.cn SEO不穩(wěn)定是指網(wǎng)站在搜索引擎中的排名不穩(wěn)定,隨著時(shí)間的推移會(huì)發(fā)生變化。這種情況可能會(huì)出現(xiàn)在網(wǎng)站頁面結(jié)構(gòu)、內(nèi)容質(zhì)量、外鏈質(zhì)量等方面存在缺陷或不合理之處。因此,優(yōu)化SEO非常重要,可以提高網(wǎng)站的穩(wěn)定性和排名。掌上幫教

    2024年02月07日
    瀏覽(114)
  • 【八大排序(十)】八大排序效率與穩(wěn)定性分析

    【八大排序(十)】八大排序效率與穩(wěn)定性分析

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:八大排序?qū)? ? ??代碼倉庫:NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)排序知識(shí) ? ???? 比較八大排序不能直接將 這八個(gè)排序放在一起討論 我們根據(jù)大致效率將它們分為兩組: (每個(gè)排序的詳情鏈接在后面) 1. 第一組 插入排

    2024年02月11日
    瀏覽(30)
  • 【排序算法】詳解冒泡排序及其多種優(yōu)化&穩(wěn)定性分析

    【排序算法】詳解冒泡排序及其多種優(yōu)化&穩(wěn)定性分析

    冒泡排序(Bubble Sort) 就是從序列中的 第一個(gè)元素 開始,依次對(duì) 相鄰的兩個(gè)元素 進(jìn)行比較,如果前一個(gè)元素 大于 后一個(gè)元素則交換它們的位置。如果前一個(gè)元素 小于或等于 后一個(gè)元素,則不交換它們;然后每一輪目前的元素中最大的或最小的排到最上面,就像水中的泡泡冒

    2024年02月07日
    瀏覽(21)
  • Lyapunov穩(wěn)定性分析1(正定函數(shù)、二次型正定判定)

    Lyapunov穩(wěn)定性分析1(正定函數(shù)、二次型正定判定)

    1.1 定義: 令 V ( x )是向量 x 的 標(biāo)量函數(shù) , S 是x空間包含原點(diǎn)的封閉有限區(qū)域。如果對(duì)于 S 中的所有 x ,都有: 則 V ( x )是 正定的 (半正定)。正定函數(shù)更直觀的描述如下圖所示: 如果條件(3)中不等式的符號(hào) 反向 ,則稱V(x)是 負(fù)定的 (負(fù)半定的)。 如果在S域內(nèi),不論

    2024年02月16日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)】排序算法復(fù)雜度 及 穩(wěn)定性分析 【圖文詳解】

    【數(shù)據(jù)結(jié)構(gòu)】排序算法復(fù)雜度 及 穩(wěn)定性分析 【圖文詳解】

    前面給大家講述了各大排序算法的原理、思路以及實(shí)現(xiàn)步驟、代碼碼源,下面讓我們來對(duì)比一下各大排序之間的算法復(fù)雜度以及穩(wěn)定性分析優(yōu)劣,加深我們對(duì)于各排序算法的理解,幫助我們以后能更快的在具體場(chǎng)景下選擇出最適的排序算法。 【數(shù)據(jù)結(jié)構(gòu)】冒泡排序 (碼源實(shí)

    2024年02月05日
    瀏覽(121)
  • 主動(dòng)發(fā)現(xiàn)系統(tǒng)穩(wěn)定性缺陷:混沌工程

    主動(dòng)發(fā)現(xiàn)系統(tǒng)穩(wěn)定性缺陷:混沌工程

    這是一篇較為詳細(xì)的混沌工程調(diào)研報(bào)告,包含了背景,現(xiàn)狀,京東混沌工程實(shí)踐,希望幫助大家更好的了解到混沌工程技術(shù),通過混沌工程實(shí)驗(yàn),更好的為系統(tǒng)保駕護(hù)航。 Netflix公司最早系統(tǒng)化地提出了混沌工程的概念。2008年8月,Netflix公司由于數(shù)據(jù)庫發(fā)生故障,導(dǎo)致了三天

    2024年02月08日
    瀏覽(23)
  • TI 高精度實(shí)驗(yàn)室《運(yùn)算放大器系列--穩(wěn)定性分析》

    TI 高精度實(shí)驗(yàn)室《運(yùn)算放大器系列--穩(wěn)定性分析》

    TI 高精度實(shí)驗(yàn)室《運(yùn)算放大器系列–穩(wěn)定性分析》 一個(gè)不穩(wěn)定的運(yùn)放電路將會(huì)得到失真的瞬態(tài)響應(yīng),輸出波形不是預(yù)期的結(jié)果。當(dāng)輸入或者負(fù)載變化時(shí),這就會(huì)引起輸出較大的過沖和失調(diào),甚至導(dǎo)致持續(xù)的振蕩波形。 通常穩(wěn)定性問題源于在運(yùn)放輸出或者反相輸入端連接了電

    2024年02月04日
    瀏覽(22)
  • 基于STATCOM的風(fēng)力發(fā)電機(jī)穩(wěn)定性問題仿真分析(Simulink)

    基于STATCOM的風(fēng)力發(fā)電機(jī)穩(wěn)定性問題仿真分析(Simulink)

    ???????? 歡迎來到本博客 ???????? ??博主優(yōu)勢(shì): ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運(yùn)行結(jié)果 ??3?參考文獻(xiàn) ??4 Matlab代碼實(shí)現(xiàn) ? STAT

    2024年02月02日
    瀏覽(18)
  • Linux TCP隊(duì)列的實(shí)例詳解,提高網(wǎng)絡(luò)性能和穩(wěn)定性!

    Linux TCP隊(duì)列的實(shí)例詳解,提高網(wǎng)絡(luò)性能和穩(wěn)定性!

    ?? 個(gè)人網(wǎng)站:ipengtao.com TCP 隊(duì)列是 Linux 操作系統(tǒng)中關(guān)鍵的網(wǎng)絡(luò)管理組件,它們有助于控制和優(yōu)化網(wǎng)絡(luò)連接的性能。在這篇文章中,將深入研究 Linux TCP 隊(duì)列的工作原理、配置選項(xiàng)以及提供豐富的示例代碼,以幫助大家更好地理解和管理 TCP 隊(duì)列。 在理解 TCP 隊(duì)列之前,需要了

    2024年01月18日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包