是否可以使用gdb
运行流程,然后修改一些内存,然后从流程中detach
进行修改?
我无法在gdb
之外启动进程,因为我需要在执行第一条指令之前修改内存。
当您从detach
开始的流程gdb
时,gdb
会挂起,但从其他流程中删除gdb
会使调试过程仍在运行。
我目前使用以下脚本启动该过程:
echo '# custom gdb function that finds the entry_point an assigns it to $entry_point_address
entry_point
b *$entry_point_address
run
set *((char *)0x100004147) = 0xEB
set *((char *)0x100004148) = 0xE2
detach # gdb hangs here
quit # quit never gets executed
' | gdb -quiet "$file"
我的gdb
版本都会发生这种情况:
GNU gdb 6.3.50-20050815 (Apple version gdb-1824)
GNU gdb 6.3.50-20050815 (Apple version gdb-1822 + reverse.put.as patches v0.4)
答案 0 :(得分:4)
我非常确定您无法脱离直接在gdb
下启动的劣质流程,但是,以下内容可能对您有用,这是基于最近的gdb
,我不知道这对版本6.3有多大作用。
创建一个小的shell脚本,如下所示:
#! /bin/sh
echo $$
sleep 10
exec /path/to/your/program arg1 arg2 arg3
现在启动它,从echo $$
发现pid,并附加到shell脚本,如gdb -p PID
。一旦附上,您可以:
(gdb) set follow-fork-mode child
(gdb) catch exec
(gdb) continue
Continuing.
[New process NEW-PID]
process NEW-PID is executing new program: /path/to/your/program
[Switching to process NEW-PID]
Catchpoint 1 (exec'd /path/to/your/program), 0x00007f40d8e9fc80 in _start ()
(gdb)
您现在可以根据需要修改子进程。完成后,请执行以下操作:
(gdb) detach
/path/to/your/program
应该恢复(或在这种情况下开始)运行。