2011-09-28 95 views
0

當您使用ptrace執行單步操作時,該過程執行一行「代碼」還是執行一行彙編代替。如果是前一種情況,有沒有辦法通過一個處理器指令在Linux中執行一個進程?單步執行一個彙編指令的過程

我的意思是在內核中執行此操作,但GDB源代碼很大,很難精確跟蹤它做什麼來執行ASM單步執行。我想單步執行過程中它只是我不知道是什麼的ptrace的單步的確切行爲(只需1個指令或更多?)

回答

2

它執行一個程序集。您可以通過打開兩個會話來驗證這一點,在一個會話中,您可以讓程序運行,顯示IP寄存器的內容(EIP爲32位,RIP爲64位),並在其他運行objdump中使用以下命令 - objdump -d - j.code |減少並驗證

0

用GDB:http://condor.depaul.edu/glancast/373class/docs/gdb.html#Running_the_Program_being_Debugged

如果您有機會獲得源代碼或調試符號,您可以一次只執行一行。如果你不這樣做,你必須一次執行一條指令。

+0

由於某種原因,我的編輯並不堅持我的意思是在Linux內核中執行此操作,我不確定ptrace_request(SINGLESTEP ...)是否能夠完全符合我的要求。 –

+0

你是說你打算單步執行內核?或者您希望內核執行一個進程的單步執行? –

+0

我已經知道你可以用KGDB模塊單步執行內核。 –