how does qemu load elf64 file

文章详细描述了在QEMU模拟器中使用GDB对ARM架构的Cortex-A57处理器进行调试,跟踪加载Linux内核(vmlinux)时elf_ops函数的执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(gdb) set args  -machine virt -cpu cortex-a57 -m 1024M -kernel ./vmlinux -nographic
(gdb) b load_elf64
Breakpoint 1 at 0x5f41a7: file /root/doctor/qemu/qemu-4.2.0/hw/core/loader.c, line 490.
(gdb) run
Starting program: /root/doctor/qemu/qemu-4.2.0/build/aarch64-softmmu/qemu-system-aarch64 -machine virt -cpu cortex-a57 -m 1024M -kernel ./vmlinux -nographic
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffe898e700 (LWP 79254)]
[New Thread 0x7fffcbbff700 (LWP 79255)]

Thread 1 "qemu-system-aar" hit Breakpoint 1, load_elf64 (sym_cb=<optimized out>, load_rom=<optimized out>, as=<optimized out>,
    data_swab=<optimized out>, clear_lsb=<optimized out>, elf_machine=<optimized out>, highaddr=<optimized out>,
    lowaddr=<optimized out>, pentry=<optimized out>, must_swab=<optimized out>, translate_opaque=<optimized out>,
    translate_fn=<optimized out>, elf_note_fn=<optimized out>, fd=<optimized out>, name=<optimized out>)
    at /root/doctor/qemu/qemu-4.2.0/include/hw/elf_ops.h:333
333         if (read(fd, &ehdr, sizeof(ehdr)) != sizeof(ehdr))
(gdb) bt
#0  load_elf64
    (sym_cb=<optimized out>, load_rom=<optimized out>, as=<optimized out>, data_swab=<optimized out>, clear_lsb=<optimized out>, elf_machine=<optimized out>, highaddr=<optimized out>, lowaddr=<optimized out>, pentry=<optimized out>, must_swab=<optimized out>, translate_opaque=<optimized out>, translate_fn=<optimized out>, elf_note_fn=<optimized out>, fd=<optimized out>, name=<optimized out>) at /root/doctor/qemu/qemu-4.2.0/include/hw/elf_ops.h:333
#1  load_elf_ram_sym (filename=0x55555686c880 "./vmlinux", elf_note_fn=0x0, translate_fn=
    0x0, translate_opaque=0x0, pentry=0x7fffffffd450, lowaddr=0x7fffffffd458, highaddr=0x7fffffffd460, big_endian=0, elf_machine=183, clear_lsb=1, data_swab=0, as=0x5555569b43f0, load_rom=true, sym_cb=0x0)
    at /root/doctor/qemu/qemu-4.2.0/hw/core/loader.c:491
#2  0x0000555555b49e1d in load_elf_ram
    (load_rom=true, as=0x5555569b43f0, data_swab=0, clear_lsb=1, elf_machine=183, big_endian=0, highaddr=0x7fffffffd460, lowaddr=0x7fffffffd328, pentry=0x7fffffffd320, translate_opaque=0x0, translate_fn=0x0, elf_note_fn=0x0, filename=<optimized out>)
    at /root/doctor/qemu/qemu-4.2.0/hw/core/loader.c:439
#3  load_elf_as (filename=<optimized out>, elf_note_fn=elf_note_fn@entry=0x0, translate_fn=translate_fn@entry=
    0x0, translate_opaque=translate_opaque@entry=0x0, pentry=pentry@entry=0x7fffffffd450, lowaddr=lowaddr@entry=0x7fffffffd458, highaddr=0x7fffffffd460, big_endian=0, elf_machine=183, clear_lsb=1, data_swab=0, as=0x5555569b43f0)
    at /root/doctor/qemu/qemu-4.2.0/hw/core/loader.c:425
#4  0x0000555555977261 in arm_load_elf
    (info=0x555556843550, info=0x555556843550, as=0x5555569b43f0, elf_machine=183, highaddr=0x7fffffffd460, lowaddr=0x7fffffffd458, pentry=0x7fffffffd450) at /root/doctor/qemu/qemu-4.2.0/hw/arm/boot.c:905
#5  arm_setup_direct_kernel_boot (info=0x555556843550, cpu=0x55555696bc80) at /root/doctor/qemu/qemu-4.2.0/hw/arm/boot.c:1025
#6  arm_load_kernel (cpu=0x55555696bc80, ms=ms@entry=0x555556843400, info=info@entry=0x555556843550)
    at /root/doctor/qemu/qemu-4.2.0/hw/arm/boot.c:1301
#7  0x000055555597ca51 in machvirt_init (machine=0x555556843400) at /root/doctor/qemu/qemu-4.2.0/hw/arm/virt.c:1760
#8  0x0000555555b4600b in machine_run_board_init (machine=0x555556843400) at /root/doctor/qemu/qemu-4.2.0/hw/core/machine.c:1143
#9  0x000055555587375c in main (argc=<optimized out>, argv=<optimized out>, envp=<optimized out>)
    at /root/doctor/qemu/qemu-4.2.0/vl.c:4346
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值