./hello
hello,world
abcd
gdb做為linux程式設計師的乙個重要的除錯工具,同樣適用於彙編編寫的程式,我們用gdb對上面**進行一些簡單的除錯操作
首先開啟hello程式:
gdb hello
gnu gdb (gdb) 7.1-ubuntu
license gplv3+: gnu gpl version 3 or later 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".
for bug reporting instructions, please see:
...reading symbols from /home/deepfuture-lx/private/mytest/hello...done.
然後,我們可以使用list命令列出源**
(gdb) list
1 .section .data#初始化的變數
2 output:
3 .ascii "hello,world\n"
4 #要列印的字串,.data為初始化值的變數。output是標籤,指示字串開始的位置,ascii為資料型別
5 .section .bss#未初始化的變數,由0填充的緩衝區
6 .lcomm num,20
7 #lcomm為本地記憶體區域,即本地彙編外的不能進行訪問。.comm是通用記憶體區域。
8 .section .text#組合語言指令碼
9 .globl _start#啟動入口
10 _start:
使用break命令設定斷點
(gdb) break 17
breakpoint 1 at 0x4000c6: file hello.s, line 17.
執行至斷點
(gdb) run
starting program: /home/deepfuture-lx/private/mytest/hello
hello,world
breakpoint 1, _start () at hello.s:17
繼續執行下條語句
17 movl $0,%eax
(gdb) next
18 movl $num,%edi
顯示所有暫存器的值
(gdb) info registers
rax 0x0 0
rbx 0x1 1
rcx 0x60011c 6291740
rdx 0xc 12
rsi 0x0 0
rdi 0x0 0
rbp 0x0 0x0
rsp 0x7fffffffe2d0 0x7fffffffe2d0
r8 0x0 0
r9 0x0 0
r10 0x0 0
r11 0x0 0
r12 0x0 0
r13 0x0 0
r14 0x0 0
r15 0x0 0
rip 0x4000cb 0x4000cb <_start+27>
eflags 0x202 [ if ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
---type to continue, or q to quit---
gs 0x0 0
(gdb) next
19 movl $65,1(%edi)#a 的ascii
按十六進製制格式輸出edi暫存器的值。/x表示16進製制,/d表示10進製,/t表示二進位制
(gdb) print/x $rdi
$3 = 0x600128
繼續執行
(gdb) next
20 movl $66,2(%edi)#b 的ascii
顯示某個記憶體位置的值,x/nyz,其中n為字段數,y為格式(c為字元,d為10進製,x為16進製制),z為字段長度(b為位元組,n為16位字,w為32位字)
(gdb) next
21 movl $67,3(%edi)#c 的ascii
(gdb) x/3cb &num
0x600128 : 0 '\000' 65 'a' 66 'b'
(gdb) next
22 movl $68,4(%edi)#d 的ascii
(gdb) next
23 movl $10,5(%edi)#\n的ascii
(gdb) next
25 movl $4,%eax#呼叫的系統功能,4為write
(gdb) x/4cb &num
0x600128 : 0 '\000' 65 'a' 66 'b' 67 'c'
退出gdb
(gdb)quit
C指標原理 7 C內嵌彙編
如何在內聯彙編中訪問c程式的區域性變數呢,請看下面這段 include int main void 這個例子完成這個計算 xa xb 2 6 2 2 16 不使用全域性變數與彙編 互動,我們必須使用擴充套件gnu的asm 格式為 asm 彙編 輸出位置 輸入位置 改動的暫存器列表 彙編 中涉及暫存器...
AT T學習筆記彙編之內聯c語言
asm assembly code ansi c將asm用於其它用途,用 asm 替換 在asm後面加上 volatile可以禁止編譯器優化 asm volatile pusha n tpopa asm volatile pushl 1 n t 擴充套件asm asm asm code output...
att格式彙編指令 匯程式設計序基本原理知識筆記
1 組合語言的概念 定義 為特定計算機或計算機系統設計的面向機器的符號化程式語言。匯程式設計序也就是用組合語言編寫的程式。計算機要執行匯程式設計序需要用專門的翻譯程式進行翻譯,然後計算機才可以識別。彙編語句的分類 指令語句 偽指令語句和巨集指令語句 1.1 指令語句 又稱機器 指令語句,翻譯後能夠產...