當然是
gcc
+
gdb
不過gcc/gdb
用
AT&T
風格的匯編,和
dos/win32
下的
Intel
風格不太一樣,你要去了解一下具體區別。
.s
文件專表示匯編源碼屬文件,
可以用gcc
編譯,比如
gcc
-g
a.s
-o
a.exe
然後就可以用
gdb
a.exe
來調試了,用
print
$eax
來顯示
eax
寄存器,等等。
具體
gdb
命令自己搜索了解一下。
下面給個入門例子,把下面代碼存入
a.s
,
就可以在
linux
下用我上面說的方法編譯和調試了:
hello:
.string
"Hello
world\n"
.globl
main
main:
movl
$4,
%eax
movl
$1,
%ebx
movl
$hello,
%ecx
movl
$12,
%edx
int
$0x80
ret
『貳』 linux下什麼程序可以直接運行
Linux系統中只要是有執行許可權的文件,理論上都可以直接運行,具體來內說,那些腳本之類容比如shell腳本、Python腳本、Perl腳本、Ruby腳本,還有二進制文件,是可以直接運行的。
也有些程序不用安裝也可以直接運行,有點類似於Windows系統上的綠色程序(也是不用安裝的那種)。這樣的程序大多是一個壓縮包,在命令行解壓後,cd命令切換入解壓後的目錄,目錄裡面或者是二進制文件,或者是一個shell腳本,用於直接啟動這個程序。我前段時間下載了一個程序就是這樣子,程序是Linux上面的著名的圖形界面調試器,名為Affinic Debugger GUI,從它的官網上下載下來以後,因為它是個tar壓縮包,而且網上也沒有安裝教程,所以才開始還以為是個源碼包,要編譯安裝呢,解壓後發現沒有源碼,倒是有一個名為adg32的shell腳本,然後我就在終端上試著運行了下,結果Affinic Debugger GUI的程序界面就出來了,原來這個程序是不需要安裝直接運行的。這個多試試就知道了。
『叄』 Linux串口調試工具--minicom
安裝完成後,請不要著急打開軟體。需先進行配置。具體步驟如下:
查看串口設備及文件許可權
linux下的所有操作面向用戶的都是文件操作,在對串口操作之前,我們應該先確認自己對該文件有沒有讀寫許可權。
linux下的usb串口命名為ttyUSB*,運行上面命令,可以看到有幾個設備掛載。
我們這里是:
只有ttuUSB0.再用lsusb查看:
usb 004正是我們掛上去的usb轉串口線纜,使用的晶元是PL2303。
但是正如上面顯示,ttyUSB0這個設備是root所有的,所以,我們以普通用戶身份打開minicom是沒法訪問該文件的。
運行sudo minicom -s便進入了minicom的配置界面,使用上下鍵選擇Serial port setup,回車。此時游標在「change which setting」後面停留,它的上面有如下菜單:
我們只需輸入上面對應的字母,就可以進如相應的菜單進行設置。設置完成,回車,游標會回到「change which setting」後面,如此重復。完成按回車返回主菜單即可。
返回主菜單後,選擇「Save setup as df1」,將其保存為默認設置,然後選擇 Exit退出。需退出後重新打開minicom,軟體才會使用上述參數進行初始化。
注意:如果沒有使用USB轉串口,而是直接使用串口,那麼Serial Device要配置為/dev/ttyS0。
如果上面設置順利,打開minicom
重新給設備上電後,此時,窗口裡就有信息列印出來了。
1)需使用Ctrl+a 進入設置狀態
2)按z進入設置菜單
(1)O鍵:打開配置選項;
(2)W鍵:自動卷屏。當顯示的內容超過一行之後,自動將後面的內容換行。這個功能在查看內核的啟動信息時很有用。
(3)C鍵:清除屏幕的顯示內容;
(4)B鍵:瀏覽minicom的歷史顯示;
(5)X鍵:退出minicom,會提示確認退出。
Ctrl + A --> O
選擇"Filenames and paths"
更多的參數,參見"man minicom"的輸出。
如果不加這個項,那麼在minicom和pc交互的時候中鍵入命令超過一行時候會被截斷,(這時候可以通過 <C-a> w 來開和關切換截斷行功能).
這樣,啟動之後我們會發現顯示的內容不是黑白的了。
這樣,啟動之後,所在minicom的輸出都會在<filename>中保留一份,如果原來文件存在,則追加,不存在則創建一個。
這樣,我們可以取代用 <C-a> * 發送命令的方式,將 <C-a> 替換成 [Alt] 或者 [ESC] .
這里,<filename>是你的腳本文件的名字,應該指定絕對路徑,否則就會在你啟動minicom的路徑下尋找。
Minicom是基於窗口的。要彈出所需功能的窗口,可按下 Ctrl-A (以下使用C-A來表示Ctrl-A),然後再按各功能鍵(a-z或A-Z)。先按C-A,再按'z',將出現一個幫助窗口,提供了所有命令的簡述。配置 minicom(-s 選項,或者C-A、O)時,可以改變這個轉義鍵,不過現在我們還是用Ctrl-A吧。
這里,只給出很少的命令,更多的交互命令參見"<C-a> z"的幫助輸出。
minicom -s 或啟動minicom之後運行 <C-a> o 來進行配置。
C:腳本文件的存放位置: <C-a> g 運行腳本時的路徑 。
D:選擇腳本程序: 默認 runscript ,也可以選擇 bash 腳本格式。
可以參考man手冊 man runscript .交互命令中可以運行" <C-a> G "來運行腳本。
參考資料 :
『肆』 哪裡有LINUX下的串口調試工具
minicom
minicom 是一款啟動速度快,功能強大的串口終端調試工具,當然缺點就是純字元界面,沒有圖形界面的調試工具看起來直觀方便,但是它功能十分強大,並且在一些沒有屏幕的嵌入式主板上運行頗有用處。下面給出具體的安裝與使用教程:
安裝:apt-get install minicom
使用流程:
『伍』 Linux 裡面的gdb到底是個什麼東西
分類: 電腦/網路 >> 操作系統/系統故障
問題描述:
第一次在Linux上工作,要用到一個什麼gdb的東東。gdb到底是什麼呢,各位老大?
解析:
Linux 包含了一個叫 gdb 的 GNU 調試程序. gdb 是一個用來調試 C 和 C++ 程序的強力調試器. 它使你能在程序運行時觀察程序的內部結構和內存的使用情況. 以下是 gdb 所提供的一些功穗螞亂能:
它使你能監視你程序中變數的值.
它使你能設置斷點以使程序在指定的代碼行上停止執行.
它使你能一行行的執行你的代碼.
在命令行上鍵入 gdb 並按回車鍵就可以運行 gdb 了, 如果一切正常的話, gdb 將被啟動並且你將在屏幕上看到類似的內容:
GDB is free sofare and you are wele to distribute copies of it
under certain conditions; type "show ing" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.14 (i486-slakware-linux), Copyright 1995 Free Sofare Foundation, Inc.
(gdb)
當你啟動 gdb 後, 你能在命令行上指定很多的猜檔選項. 你也可以以下面的方式來運行 gdb :
gdb <fname>
當你用這種方式運行 gdb , 你能直接指定想要調試的程序. 這將告訴gdb 裝入名為 fname 的可執行文件. 你也可以用 gdb 去檢查一個因程序異常終止而產生的 core 文件, 或者與一個正在運行的程序相連. 你可以參考 gdb 指物和南頁或在命令行上鍵入 gdb -h 得到一個有關這些選項的說明的簡單列表.
『陸』 Linux內核調試工具KGDB是什麼工具
內核工具KGDB調試環境需要為Linux 內核加上 kgdb補丁,補丁實現GDB遠程調試所需要的功能,包括命令處理、陷阱處理及串口通信3個主要的部分。KGDB補丁的主要作用是在Linux 內核中添加了一個調試Stub。調試Stub是Linux 內核中的一小段代碼,是運行GDB的開發機和所調試內核之間的一個媒介。GDB和調試stub之間通過GDB串列協議進行通信。GDB串列協議是-種基於消息的ASCII 碼協議,包含了各種調試命令。當設置斷點時,KGDB將斷點的指令替換為一條 trap指令,當執行到斷點時控制權就轉移到調試 stub中去。此時,調試stub 的任務就是使用遠程串列通信協議將當前環境傳送給GDB,然後從GDB處接收命令。GDB命令告訴stub 下一步該做什麼,當stub收到繼續執行的命令時,將恢復程序的運行環境,把對 CPU的控制權重新交還給內核。KGDB補丁給內核添加以下3個部件:
(1 ) GDB stub
GDB stub被稱為調試插樁(簡稱為stub),是KGDB調試器的核心。它是Linux內核中的一小段代碼,用來處理主機上: GDB發來的各種請求;並且在內核處於被調試狀態時,控制目標機板上的處理器。
(2)修改異常處理函數
當這個異常發生時,內核將控制權交給KGDB調試器,程序進入KGDB提供的異常處理函數中。在裡面,可以分析程序的各種情況。
(3)串口通信
GDB和 stub之間通過GDB串列協議進行通信。它是一種基於消息的ASCII 碼協議,包含了各種調試命令。除串口外,也可以使用網卡進行通信。以設置內核斷點為例說明KGDB與GDB之間的工作過程。設置斷點時,KGDB修改內核代碼,將斷點位置的指令替換成一條異常指令(在ARM中這是一條未定義的指令)。當執行到斷點時發生異常,控制權轉移到stub 的異常處理函數中。此時,stub的任務就是使用GDB串列通信協議將當前環境傳送給GDB,然後從GDB處接收命令,GDB命令告訴stub下一步該做什麼。當stub收到繼續執行的命令時,將恢復原來替換的指令、恢復程序的運行環境,把對CPU的控制權重新交還給內核。
『柒』 linux內核漏洞分析實戰 看看專家是怎麼一步步用gdb kgdb調試linux內核驅動的
Linux內核調試方法
kdb:只能在匯編代碼級進行調試;
優點是不需要兩台機器進行調試。
gdb:在調試模塊時缺少一些至關重要的功能,它可用來查看內核的運行情況,包括反匯編內核函數。
kgdb:能很方便的在源碼級對內核進行調試,缺點是kgdb只能進行遠程調試,它需要一根串口線及兩台機器來調試內核(也可以是在同一台主機上用vmware軟體運行兩個操作系統來調試)
printk() 是調試內核代碼時最常用的一種技術。在內核代碼中的特定位置加入printk() 調試調用,可以直接把所關心的信息打列印到屏幕上,從而可以觀察程序的執行路徑和所關心的變數、指針等信息。 Linux 內核調試器(Linux kernel debugger,kdb)是 Linux 內核的補丁,它提供了一種在系統能運行時對內核內存和數據結構進行檢查的辦法。Oops、KDB在文章掌握 Linux 調試技術有詳細介紹,大家可以參考。 Kprobes 提供了一個強行進入任何內核常式,並從中斷處理器無干擾地收集信息的介面。使用 Kprobes 可以輕松地收集處理器寄存器和全局數據結構等調試信息,而無需對Linux內核頻繁編譯和啟動,具體使用方法,請參考使用 Kprobes 調試內核。
/proc文件系統
在 /proc 文件系統中,對虛擬文件的讀寫操作是一種與內核通信的手段,要查看內核回環緩沖區中的消息,可以使用 dmesg 工具(或者通過 /proc 本身使用 cat /proc/kmsg 命令)。清單 6 給出了 dmesg 顯示的最後幾條消息。
清單 6. 查看來自 LKM 的內核輸出
[root@plato]# dmesg | tail -5
cs: IO port probe 0xa00-0xaff: clean.
eth0: Link is down
eth0: Link is up, running at 100Mbit half-plex
my_mole_init called. Mole is now loaded.
my_mole_cleanup called. Mole is now unloaded.
可以在內核輸出中看到這個模塊的消息。現在讓我們暫時離開這個簡單的例子,來看幾個可以用來開發有用 LKM 的內核 API。
調試工具
使用調試器來一步步地跟蹤代碼,查看變數和計算機寄存器的值。在內核中使用互動式調試器是一個很復雜的問題。內核在它自己的地址空間中運行。許多用戶空間下的調試器所提供的常用功能很難用於內核之中,比如斷點和單步調試等。