虚拟化(2):qemu+kernel 单步调试arm64 linux kernel

pre:

gdb-multiarch

kernel debug:

第一步:qemu启动内核并暂停等待(暂停是可选的,如果不调启动,可以去掉),同时需要建立网络端口等待gdb attach;

命令:

qemu-system-aarch64 -machine virt,virtualization=true,gic-version=3 -nographic -m size=1024M -cpu cortex-a72 -smp 2 -kernel /local/mnt2/workspace/lx/talos/lkp10/kernel_platform/out/kernel-qcm6490-qclinux-base/dist/Image -drive format=raw,file=rootfs.img -append "root=/dev/vda rw nokaslr" -s -S

# -s 是-gdb tcp::1234 的简写,如果需要换端口可以用-gdb tcp::1234替换-s参数

# -S 是freeze cpu at startup的指令,也就是kernel 启动时就挂起,等待调试连接,如果不需要调试内核启动,这个参数也

可以去掉

# nokaslr 关闭KASLR,它是内核启动添加随机地址保护

第二步:启动gdb(target=arm64)加载对应kernel Image的vmlinux, attach到指定端口即可

gdb-multiarch --tui vmlinux

target remote:1234

第三步:如果是启动是挂起,直接设置断点即可调试

b 函数名称:可以在相应函数打断点

bt看堆栈,可以用frame去看每一层关系

s和n都是一行一行执行代码:

n:不进入函数内部,整个函数会被执行

s:进入函数内部,一步步观察

#通信硬件人笔面经互助##秋招提前批启动你开冲了吗##牛客创作赏金赛#
qemu+kernel 文章被收录于专栏

qemu+kernel

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务