目錄
- 1. 基本實驗工具的使用
- 1.1GCC
- 在IA-32+LINUX平臺
- 基本的GCC 命令
- 一些其他選項
- 1.2objdump
- 1.3gdb
- 啟動
gdb除錯工具 - 設定斷點
- 啟動程式運行
- 查看程式運行時的當前狀態
- 繼續執行下一條指令或陳述句
- 退出
- 啟動
- 1.1GCC
1. 基本實驗工具的使用
1.1GCC
在IA-32+LINUX平臺
在IA-32+LINUX平臺上,編譯,除錯和運行C語言
-
為了把C語言源程式編譯成IA-32機器指令,X86-64位計算機系統需要先運行下列命令:
sudo apt-get install build-essential module-assistant sudo apt-get install gcc-multilib g++-multilib
基本的GCC 命令
-
-E:翻譯帶#的檔案,將頭檔案內容生成到源檔案中, -
-S:生成匯編檔案, -
-C:生成鏈接檔案,就是組裝的模塊,

-
gcc -E hello.c -o hello.i gcc -S hello.i -o hello.s gcc -C hello.s -o hello.o gcc hello.o -o hello
一些其他選項
gcc -O0 -m32 -g hello.c -o hello
-O0: 不用編譯優化-m32:編譯成x86-32位的指令-g:帶除錯資訊
1.2objdump
- 作用:反匯編二進制的目標檔案
objdump -S gdbtest.o > gdbtesto.txt
objdump -S gdbtest > gdbtest.txt
-s:在反匯編后的內容中添加源代碼


1.3gdb
啟動gdb 除錯工具
啟動gdb 除錯工具,加載要被除錯的可執行檔案
# 啟動方式1:gdb [可執行檔案名]
gdb gdbtest
# 啟動方式2:1.gdb 2.file [可執行檔案名]
gdb
file gdbtest
# 查看源代碼
l
設定斷點
# 在 main 函式的入口處設定斷點
break main # 或者 b main
# 在源程式 gdbtest.c 的第 3 行處設定斷點
break gdbtest.c:3
啟動程式運行
# 啟動程式運行,程式會在斷點處停下
run # 或者 r
查看程式運行時的當前狀態
-
程式的當前斷點位置
eip暫存器:保存一下條要執行的指令的地址# i r:顯示所有暫存器的內容 # i r eip: 只顯示暫存器 eip 的內容,64位是rip i r eip -
通用暫存器內容
i r eax ebx ecx edx #(或i r) 顯示通用暫存器內容 -
查看變數的地址
p &a # 查看a的地址 -
存盤器單元內容
x/8xb 0xffffd2bc x/2xw 0xffffd2bc? 各部分含義解釋:
陳述句含義:
-
-
堆疊幀資訊
說明: IA-32用堆疊來支持程序的嵌套呼叫,程序的入口引數、回傳地址,被保存暫存器的值、被呼叫程序中的非靜態區域變數等都會被保存在堆疊中,
堆疊幀:系統為每個執行的程序分配一個堆疊空間,類似于游泳池儲物柜的申請和返還

當前堆疊幀范圍:
i r esp ebp # esp堆疊頂指標、ebp 堆疊底指標當前堆疊幀位元組數:
y = R[ebp] - R[esp] + 4舉例:

顯示當前堆疊幀內容:
x/yxb $esp # y: R[ebp]-R[esp]+4的值, 堆疊幀起始地址是esp指向的單元地址; x/zxw $esp # z=y/4, 顯示從esp指向的地址開始,
繼續執行下一條指令或陳述句
si # 執行一潭訓器指令
s # 執行一條C陳述句
退出
quit
------------恢復內容結束------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498185.html
標籤:Linux
上一篇:運維各常用命令總結
下一篇:Linux基礎命令







