日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CTF工具-gdb简介

發(fā)布時(shí)間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTF工具-gdb简介 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

gdb簡介

gdb是 GNU 開發(fā)的一個(gè)Unix/Linux下強(qiáng)大的程序調(diào)試工具。
使用 gdb 進(jìn)行程序調(diào)試之前,gcc編譯選項(xiàng)加上 -g 選項(xiàng)來講調(diào)試信息加到可執(zhí)行文件里
一般來說,GDB主要幫助你完成下面四個(gè)方面的功能:
1、啟動(dòng)你的程序,可以按照你自定義的要求隨心所欲的運(yùn)行程序。
2、可以讓調(diào)試程序在你所指定的位置的斷點(diǎn)處停止。
3、當(dāng)程序停止時(shí),可以檢查此時(shí)你的程序里所發(fā)生的事情。
最后,動(dòng)態(tài)的改變你程序的執(zhí)行環(huán)境。

使用GDB

一般來說GDB主要調(diào)試的是C/C++程序。要調(diào)試C/C++程序,首先在編譯時(shí),我們需要把調(diào)試信息加到可執(zhí)行文件里。使用編譯器(cc/gcc/g++)的-g參數(shù)可以做到這一點(diǎn),如:
$ cc –g hello.c –o hello
$ g++ -g hello.cpp –o hello
如果沒有-g,你將看不見程序的函數(shù)名,變量名,所代替的全是運(yùn)行的內(nèi)存地址。當(dāng)你用-g把調(diào)試信息假如之后,并成功編譯目標(biāo)代碼以后,可以用GDB調(diào)試它。

一.運(yùn)行

run(簡記為 r)其作用是運(yùn)行程序,當(dāng)遇到斷點(diǎn)后,程序會(huì)在斷點(diǎn)處停止運(yùn)行,等待用戶輸入下一步的命令。
continue (簡寫c )繼續(xù)執(zhí)行,到下一個(gè)斷點(diǎn)處(或運(yùn)行結(jié)束)
next(簡寫 n)單步跟蹤程序,當(dāng)遇到函數(shù)調(diào)用時(shí),也不進(jìn)入此函數(shù)體;此命令同 step 的主要區(qū)別是,step 遇到用戶自定義的函數(shù),將步進(jìn)到函數(shù)里去運(yùn)行,而 next 則直接調(diào)用函數(shù),不會(huì)進(jìn)入到函數(shù)體內(nèi)。
step(簡寫s)單步調(diào)試如果有函數(shù)調(diào)用,則進(jìn)入函數(shù);與命令n不同,n是不進(jìn)入調(diào)用的函數(shù)的
until當(dāng)你厭倦了在一個(gè)循環(huán)體內(nèi)單步跟蹤時(shí),這個(gè)命令可以運(yùn)行程序直到退出循環(huán)體。
until+行號(hào)運(yùn)行至某行,不僅僅用來跳出循環(huán)
finish運(yùn)行程序,直到當(dāng)前函數(shù)完成返回,并打印函數(shù)返回時(shí)的堆棧地址和返回值及參數(shù)值等信息。
call函數(shù)(參數(shù))調(diào)用程序里可見的函數(shù),并傳遞“參數(shù)”,如:call gdb_test(55)
quit(簡記為 q)退出gdb

二.設(shè)置斷點(diǎn)

break n (簡寫b n)在第n行處設(shè)置斷點(diǎn),可以直接對某個(gè)cpp設(shè)置斷點(diǎn) b xxx.cpp:36, 36行設(shè)置斷點(diǎn)
b fn1 if a>b條件斷點(diǎn)設(shè)置
break func(break縮寫為b)在函數(shù)func()的入口處設(shè)置斷點(diǎn),如:break cb_button
delete 斷點(diǎn)號(hào)n刪除第n個(gè)斷點(diǎn)
disable 斷點(diǎn)號(hào)n暫停第n個(gè)斷點(diǎn)
enable 斷點(diǎn)號(hào)n開啟第n個(gè)斷點(diǎn)
clear 行號(hào)n清除第n行的斷點(diǎn)
info b (info breakpoints)顯示當(dāng)前程序的斷點(diǎn)設(shè)置情況
delete breakpoints清除所有斷點(diǎn)

三.查看源代碼

list (簡記為 l )其作用就是列出程序的源代碼,默認(rèn)每次顯示10行。
list 行號(hào)將顯示當(dāng)前文件以“行號(hào)”為核心的前后10行代碼,如:list 12
list 函數(shù)名將顯示“函數(shù)名”所在函數(shù)的源代碼,如:list main
list不帶參數(shù),將接著上一次 list 命令的,輸出下邊的內(nèi)容。

四.打印表達(dá)式

print 表達(dá)式(簡記為 p)其“表達(dá)式”可以為任何當(dāng)前正在被測試程序的有效表達(dá)式,比如當(dāng)前正在調(diào)試C語言的程序,那么“表達(dá)式”可以是任何C語言的有效表達(dá)式,包括數(shù)字,變量甚至是函數(shù)調(diào)用。
print a將顯示整數(shù) a 的值
print ++a將把 a 里的值加1,并顯示出來
print name將顯示字符串 name 的值
print gdb_test(22)將以整數(shù)22作為參數(shù)調(diào)用 gdb_test() 函數(shù)
print gdb_test(a)將以變量 a 作為參數(shù)調(diào)用 gdb_test() 函數(shù)
display 表達(dá)式在單步運(yùn)行時(shí)將非常有用,使用display命令設(shè)置一個(gè)表達(dá)式后,它將在每次單步進(jìn)行指令后,緊接著輸出被設(shè)置的表達(dá)式及值。如: display a
watch 表達(dá)式設(shè)置一個(gè)監(jiān)視點(diǎn),一旦被監(jiān)視的“表達(dá)式”的值改變,gdb將強(qiáng)行終止正在被調(diào)試的程序。如: watch a
whatis查詢變量或函數(shù)
info function查詢函數(shù)
擴(kuò)展info locals顯示當(dāng)前堆棧頁的所有變量

五.查詢運(yùn)行信息

where/bt當(dāng)前運(yùn)行的堆棧列表;
bt backtrace顯示當(dāng)前調(diào)用堆棧
up/down改變堆棧顯示的深度
set args 參數(shù)指定運(yùn)行時(shí)的參數(shù)
show args查看設(shè)置好的參數(shù)
info program來查看程序的是否在運(yùn)行,進(jìn)程號(hào),被暫停的原因

總結(jié)

以上是生活随笔為你收集整理的CTF工具-gdb简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。