我见过最全的剖析QEMU原理的文章

qemu代码分析

qemu中ELF文件的加载

几个关键点,可以设计断点,观察。

$ cat command.gdb
set breakpoint pending on
file bin/debug/native/x86_64-softmmu/qemu-system-x86_64
handle SIGUSR2 noprint nostop
handle SIGUSR1 noprint nostop
# type_init before main
# break type_init
break main
break main_loop
break qemu_init_cpu_loop
# qemu_coroutine_create when bdrv_open
break qemu_coroutine_create
# drive_init_func -> blk_new_open
break qemu_coroutine_new
break qemu_coroutine_enter

# drive_init_func load linux-0.2.img
break bdrv_open_image
break bdrv_open

# rcu, drive_init_func, ide_create_drive, vnc_init_func
# main_loop -> do_spawn_thread -> qemu_thread_create
break qemu_thread_create

# PC hardware initialisation
break pc_init1
# first init cpu, in pc_cpus_init, and start kvm or TCG
# vcpu thread
break qemu_init_vcpu
break kvm_init_vcpu
break kvm_cpu_exec
# then init pci bus
break i440fx_init
# pci_vga_init load pc-bios/vgabios-stdvga.bin
# pc_nic_init load pc-bios/efi-e1000.rom

# io thread
break iothread_complete
break qemu_thread_create

break load_image

# load kernel
break load_linux
break load_aout
break load_at
break load_elf
break load_elf_strerror
break load_image
break load_image_gzipped
break load_image_gzipped_buffer
break load_image_size
break load_image_targphys
break load_ramdisk
break load_uboot_image
break load_uimage

break load_elf_binary
break load_elf
break load_elf_image
break load_elf_64
break load_elf_32
break loader_exec

# pc-bios/bios-256k.bin
# pc-bios/vgabios-stdvga.bin
# pc-bios/efi-e1000.rom
break get_image_size
run /home/shhfeng/qemu/bin/debug/native/linux-0.2.img -vnc 0.0.0.0:1

qemu 调试(二)的更多相关文章

  1. 使用Qemu调试内核

    利用Qemu进行内核源码级调试 http://blog.csdn.net/gdt_a20/article/details/7231652 用Qemu调试Linux内核 http://blog.chin ...

  2. 使用QEMU调试Linux内核代码

    http://blog.chinaunix.net/uid-20729583-id-1884617.html http://www.linuxidc.com/Linux/2014-08/105510. ...

  3. 应用调试(二)GDB

    title: 应用调试(二)GDBdate: 2019/1/17 21:00:10 toc: true 应用调试(二)GDB gdb下载工具安装交叉工具链设置GDB介绍编译GDBtarget/host ...

  4. ubuntu14使用qemu调试linux内核

    # 下载内核源代码编译内核 cd ~/LinuxKernel/ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.x ...

  5. 采用大杀招QEMU调试Linux内核代码

    Linux调试内核代码是非常麻烦.它们一般加printk, 或者使用JTAG调试. 这里的方法是使用QEMU为了调试Linux核心. 由于QEMU自己实现gdb server, 它可以容易地使用gdb ...

  6. [转载] Fiddler为所欲为第二篇 像OD一样调试 [二]

    首先,如果大家没有看过第一篇,可以先看看第一篇,了解Fiddler script的脚本哦.传送门:https://www.52pojie.cn/thread-854434-1-1.html 导语:其实 ...

  7. Stetho简化Android调试(二)

    Stetho简化Android调试(一) 一文中讲述了如何使用Stetho结合Chrome远程调试Android App. Stetho给我们调试带来很大的便利,效率显著提升的同时也产生一个问题:如果 ...

  8. gcc gdb调试 (二)

    GDB的命令概貌——————— 启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示: /home/hchen> g ...

  9. 用 gdb 和 qemu 调试 grub

    因为qemu内置了gdbserver,所以我们可以用gdb调试qemu虚拟机上执行的代码,而且不受客户机系统限制. 以下内容是我调试 grub 0.97 时的一份笔记. 准备 qemu, gdb,以及 ...

随机推荐

  1. vs2005 测试 lua环境

    (1)添加文件核路径 (2)库文件路径 (3)main.cpp #include <stdio.h>#include <string.h> extern "C&quo ...

  2. Oracle导出空表处理方法

    exp或是expdp命令在导出数据的时候会把表记录数为0的表过滤掉,无法导出.通过如下方法可以导出记录数0的表.   1.先查询一下哪些表是空的: select table_name from use ...

  3. Invalidate(TRUE)与Invalidate(FALSE)区别(前者会发送WM_ERASEBKGND消息全部刷新,然后使用WM_PAINT消息绘制,而后者只发送WM_PAINT消息)

    使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_ERASEBKGND和WM_PAINT两个消息. 使用Invalidate(FALSE)函数时,它只会向消息队列中添加了WM_P ...

  4. Qt 中程序自动重启

    参照至 dbzhang老师的博文,记录于此....... 要想理解重启,先得看看Qt程序怎么退出! 1.退出 int main(int argc, char** argv) { QApplicatio ...

  5. JProfiler解决Java服务器的性能跟踪

    转自:http://www.blogjava.net/anymobile/articles/28248.html

  6. LDA(latent dirichlet allocation)

    1.LDA介绍 LDA假设生成一份文档的步骤如下: 模型表示: 单词w:词典的长度为v,则单词为长度为v的,只有一个分量是1,其他分量为0的向量         $(0,0,...,0,1,0,... ...

  7. windows更改DNS设置

    浏览器解析域名时,首先在本地的host文件中查找记录, HOSTS文件记录的地址在: 将注释去掉 访问ysp.tlmall.com 会访问127.0.0.1

  8. javascript时间处理方法收集

    首先收集到的是一个给某一个时间对象增加一段时间的方法, 例如2026-05-11增加一个月的时间,增加后时间为2026-05-11, 代码如下: function DateAdd(interval,n ...

  9. iOS_根据文字字数动态确定Label宽高

    iOS7中用以下方法 CGSize 替代过时的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 // iOS7_API_根据文字 字数动态确定Label宽高 ...

  10. 关于 ls 命令的一个小小的缺陷

    linux 的 ls : ls后边加上要显示的路径时:比方 ls /tmp 它会打印一边 /tmp 下的信息 当ls后边跟上多个同样路径的名字是,它会打印多次同样的信息 比方 ls /tmp /tmp ...