相关疑难解决方法(0)

如何在没有操作系统的情况下运行程序?

如何在没有运行操作系统的情况下自行运行程序?你能创建计算机可以在启动时加载和运行的汇编程序,例如从闪存驱动器启动计算机并运行cpu上的程序吗?

x86 assembly operating-system osdev bootloader

227
推荐指数
3
解决办法
8万
查看次数

基于qemu的低级调试

我将在ARM体系结构上测试一些低级代码.通常实验板上的实验非常复杂,所以我在想QEMU.

我想得到的是某种调试信息,如printfs或gdb.我知道这对于linux很简单,因为它实现了QEMU Integrator的设备驱动程序和gdb功能,但我不使用Linux.我还怀疑从Linux内核源代码中提取这种功能会很复杂.

我正在从一些已经实现其中一个功能的简单操作系统中搜索.你有什么建议吗?

embedded debugging gdb arm qemu

13
推荐指数
1
解决办法
8549
查看次数

在qemu中使用gdb调试引导加载程序

Freedos引导程序似乎存在问题.(在某些情况下,似乎bootcode无法找到内核.)

所以我试图用gdb调试qemu中的bootloader.按照几个维基上的说明和免费提供的在线课程资料,我像这样运行qemu

qemu-system-i386 -fda fdboot.img -boot a -s -S
Run Code Online (Sandbox Code Playgroud)

然后像这样连接gdb

$ gdb
(gdb) target remote localhost:1234
Run Code Online (Sandbox Code Playgroud)

我可以逐步完成前面的10 - 12条指令si,我假设它是SeaBIOS.

但过去,当我尝试进入引导加载程序代码时,它会继续执行而不会中断,一直到FreeDos菜单提示符.这完全跳过了我想在执行时逐步检查的引导加载程序代码.

我需要做什么才能通过引导加载程序?

[如果您想尝试自己,可以从项目网站下载freedos软盘映像.]

debugging assembly gdb qemu bootloader

12
推荐指数
1
解决办法
7603
查看次数

如何用"x/i $ pc"在GDB中反汇编16位x86引导扇区代码?它被视为32位

例如,使用BIOS打印a到屏幕的引导扇区main.asm:

org 0x7c00
bits 16
cli
mov ax, 0x0E61
int 0x10
hlt
times 510 - ($-$$) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)

然后:

nasm -o main.img main.asm
qemu-system-i386 -hda main.img -S -s &
gdb -ex 'target remote localhost:1234' \
    -ex 'break *0x7c00' \
    -ex 'continue' \
    -ex 'x/3i $pc'
Run Code Online (Sandbox Code Playgroud)

我明白了:

0x7c00:      cli    
0x7c01:      mov    $0x10cd0e61,%eax
0x7c06:      hlt 
Run Code Online (Sandbox Code Playgroud)

所以看起来它mov ax, 0x0E61被解释为32位mov %eax并且将下一条指令int 0x10作为数据.

我怎么能告诉GDB这是16位代码?

也可以看看:

x86 assembly gdb qemu disassembly

7
推荐指数
3
解决办法
3732
查看次数

用gdb调试qemu

如何使用gdb调试qemu?我一直在谷歌搜索,但找不到任何具体的东西.

debugging gdb qemu

5
推荐指数
2
解决办法
1万
查看次数

如何在QEMU中使用GDB对x86代码进行源代码级调试?

我为MBR部分编写了一个x86汇编程序.我编译如下:

nasm hellombr.asm -f bin -o hellombr.img
Run Code Online (Sandbox Code Playgroud)

然后我在qemu中运行它:

qemu -fda hellombr.img -boot a
Run Code Online (Sandbox Code Playgroud)

问题是我如何在源代码级别调试我的程序?

debugging x86 assembly qemu

5
推荐指数
1
解决办法
1819
查看次数

使用gdb和QEMU调试bootloader/bios时如何跳过中断调用?

出于教育目的,我已经从mikeos.berlios.de/write-your-own-os.html改编了这个引导加载程序,将其重写为专门加载地址0x7c00.

最终的代码是这样的:

[BITS 16]           ; Tells nasm to build 16 bits code
[ORG 0x7C00]        ; The address the code will start

start: 
    mov ax, 0       ; Reserves 4Kbytes after the bootloader
    add ax, 288 ; (4096 + 512)/ 16 bytes per paragraph 
    mov ss, ax 
    mov sp, 4096 
mov ax, 0   ; Sets the data segment 
    mov ds, ax 
    mov si, texto   ; Sets the text position 
    call imprime    ; Calls the printing routine
jmp $       ; Infinite …
Run Code Online (Sandbox Code Playgroud)

assembly gdb qemu bootloader

5
推荐指数
2
解决办法
2458
查看次数