GDB暫存器和記憶體
阿新 • • 發佈:2019-02-15
1. 檢視暫存器
(gdb) i r
(gdb) i r a # 檢視所有暫存器(包括浮點、多媒體)
(gdb) i r esp
(gdb) i r pc
2. 檢視記憶體
(gdb) x /wx 0x80040000 # 以16進位制顯示指定地址處的資料
(gdb) x /8x $esp
(gdb) x /16x $esp+12
(gdb) x /16s 0x86468700 # 以字串形式顯示指定地址處的資料
(gdb) x /24i 0x8048a51 # 以指令形式顯示指定地址處的資料(24條)
3. 修改暫存器的值
(gdb) set $v0 = 0x004000000
(gdb) set $epc = 0xbfc00000
4. 修改記憶體的值
(gdb) set {unsigned int}0x8048a51=0x0
(gdb) set *(unsigned int*)0x8048a54=0x55aa55aa
5. 記憶體搜尋
Usage: find <start> <end> <count> <value>
(gdb) define find
set $ptr = $arg0
set $cnt = 0
while ( ($ptr<=$arg1) && ($cnt<$arg2) )
if ( *(unsigned int *)$ptr == $arg3 )
x /wx $ptr
set $cnt = $cnt + 1
end
set $ptr = $ptr + 4
end
end
6. 斷點、監測點
(gdb) b *0x80400000
(gdb) watch *(unsigned int *)0xbffff400==0x90909090
(gdb) i r
(gdb) i r a # 檢視所有暫存器(包括浮點、多媒體)
(gdb) i r esp
(gdb) i r pc
2. 檢視記憶體
(gdb) x /wx 0x80040000 # 以16進位制顯示指定地址處的資料
(gdb) x /8x $esp
(gdb) x /16x $esp+12
(gdb) x /16s 0x86468700 # 以字串形式顯示指定地址處的資料
(gdb) x /24i 0x8048a51 # 以指令形式顯示指定地址處的資料(24條)
3. 修改暫存器的值
(gdb) set $v0 = 0x004000000
(gdb) set $epc = 0xbfc00000
4. 修改記憶體的值
(gdb) set {unsigned int}0x8048a51=0x0
(gdb) set *(unsigned int*)0x8048a54=0x55aa55aa
5. 記憶體搜尋
Usage:
(gdb) define find
set $ptr = $arg0
set $cnt = 0
while ( ($ptr<=$arg1) && ($cnt<$arg2) )
if ( *(unsigned int *)$ptr == $arg3 )
x /wx $ptr
set $cnt = $cnt + 1
end
set $ptr = $ptr + 4
end
end
6. 斷點、監測點
(gdb) b *0x80400000
(gdb) watch *(unsigned int *)0xbffff400==0x90909090