继上次调试qemu之后,这次又迎来了uniqb-runtime的调试
qemu-debug 多人同时 互不影响的调试qemu代码同样是影响他人办公的改动,准备就上次的脚本,进行一个系统的抽象,进一步扩展,希望达到多人共用,可以调试“任何”进程的通用脚本
代码已在个人仓库开源
http://www.crazyboy.info:9000/crazyboy/shtool.git
篇幅问题,此处不展示源码
目录结构
- home
- ygh
- debug
- usr/lib/ksvd/bin/uniqb-runtime (这次要测试替换的uniqb-runtime)
- usr/libexec/qemu-kvm (调试脚本,用来比较完整的打印分析qemu参数)
- start.sh (管理单元)
- hook.sh (hook脚本)
- debug
- ygh
- 使用时,直接构造上述目录,执行start.sh -s 自动替换debug下,所有需要调试的文件
目前支持命令
- start.sh
- l (列出当前的已经hook的程序和状态)
- s (hook debug目录下所有文件)
- s file (hook 指定文件file)
- r (取消 所有hook文件)
- r file (指定取消file的hook)
执行start后,有影响的文件
- usr
- lib/ksvd/bin/uniqb-runtime (替换为hook.sh,指向用户调试目录的文件,如果没有用户目录,指向原始文件)
- libexec/qemu-kvm (替换为hook.sh,指向用户调试目录的文件,如果没有用户目录,指向原始文件)
- home
- kylindebug12581
- usr
- lib/ksvd/bin/uniqb-runtime (存放原始文件)
- libexec/qemu-kvm (存放原始文件)
- bindir.txt(记录bin原始文件路径)
- usr
- ygh
- debug
- usr/lib/ksvd/bin/uniqb-runtime (这次要测试替换的uniqb-runtime)
- usr/libexec/qemu-kvm (调试脚本,用来比较完整的打印分析qemu参数,打印完后,继续执行原始文件)
- bindir.txt(记录bin调试路径)
- libdir.txt(记录库文件调试路径)
- debug
- kylindebug12581
此时,指定用户(ygh)启动时,使用的时自己目录下的uniqb-runtime,其他用户,使用的是kylindebug12581目录下的原始uniqb-runtime
执行完后,后续改动之后,只替换个人用户目录下的文件,依然不影响其他人调试代码
PS:
- so文件,也可以放在debug目录下调试,不会影响别人
- start.sh有自动判断功能,多人执行,只会替换一次
- 目前仅仅支持 qemu和uniqb-runtime,以及相关so库(因为需要编写根据进程参数获取用户名的方法)
调试代码:
qemu-kvm 参数分析代码
1 |
|
qemu-kvm 参数分析代码+gdb断点打印
知识点
- 命令行gdb -s 指定调试信息
- gdb breakpoint + command命令的灵活运用
- shell输入宏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
echo "$@" > /home/ygh/qemu.arg
printf ' %q' "$@" > /home/ygh/qemu.arg
str=
for i in "$@"
do
if [[ $i =~ ^-.* ]]
then
echo $str >> /home/ygh/qemu.arg
str=$i
else
str=${str}" "${i}
fi
done
echo $str >> /home/ygh/qemu.arg
exec gdb -e /home/ygh/debug/usr/libexec/qemu-kvm.bak -s /home/ygh/debug/usr/lib/debug/usr/libexec/qemu-kvm.debug >>/home/ygh/qemu.arg <<eof
start $(printf ' %q' "$@")
b usb_ehci_realize
i b
command 2
bt
p s->portnr
c
end
bt
c
eof
exit 0
- 本文作者: crazyboy
- 本文链接: http://crazyboy.www.crazyboy.info/blog/blog/2022/05/17/kylin/hook-debug/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!