虚拟化(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

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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