在Debug 電腦開機階段時,利用QEMU停住OS, 在遠端的 GDB 每次都要輸入
set architecture i8086
target remote localhost:1234
b *0x7C00
一兩次到還好,若是有時候常常輸入真的就太累了, 而 GDB 可以以 script 的方式擴充指令,就可以減少了負擔了。 首先我們開一個空白文件,取名叫做myGdbScript.txt
( myGdbScript.txt 以下稱做GdbScript)
直接在文件中輸入
set architecture i8086
target remote localhost:1234
b *0x7C00
存檔後,進入GDB後,輸入
source myGdbScript.txt
就會發現他就像批次檔一樣,自動的執行裡面的指令
也可使用定義指令的方式,在GdbScript中輸入
define local_connect
set architecture i8086
target remote localhost:1234
b *0x7C00
end
然後在 GDB 中,先把GdbScript讀進來
source myGdbScript.txt
之後就可以打
local_connect
你就會發現,他執行 define 裡面的三條指令
使用 x/5i $cs*16 + $eip 來顯示目前 CS:IP所對應的指令,如下所示
define cur_intstruction
x/5i $cs*16 + $eip
end
在 GDB 中,也是可以定義變數的,如在GdbScript中輸入
set $ADDRESS_MASK = 0x1FFFFF
在script中,輸入如下所示
printf "---------------------------[ CODE ]----\n"
如下所示,可以把某個register的值設定給變數後,印出來
define compute_regs
set $rax = ((unsigned long)$eax & 0xFFFF)
set $rbx = ((unsigned long)$ebx & 0xFFF
printf "---------------------------[ REG ]----\n"
printf "AX: %04X BX: %04X ", $rax, $rbx
printf "\n"
end