我正在尝试使用 qemu 和 gdb 调试 Linux 内核。问题是 gdb 不会在断点处停止。我搜索了一下,发现关闭 kASLR 可能会有所帮助,因为 kASLR 会混淆 gdb。
-- 在客户机上安装该内核。
+- 在来宾上安装该内核,通过在内核命令行中添加“nokaslr”来关闭 KASLR。
现在我不知道将 nokaslr 添加到命令行意味着什么以及执行此操作的方法。任何想法?
我正在编写一个简单的 NASM 汇编引导扇区。该代码应在 16 位实模式下将文本打印到屏幕上,然后切换到 32 位保护模式并将文本打印到屏幕上。
我使用 QEMU 作为我的 CPU 模拟器,它按照应有的方式从 16 位模式打印文本。但是,在 32 位模式下应该打印的文本不会打印。
我认为这是我的代码的问题,但我也运行了类似的代码,同样的问题是仅在 16 位模式下工作。
是我没有正确使用 QEMU,还是我弄乱了其他东西?我的代码是:
引导扇区.asm
; Boot sector that enters 32 bit protected mode
[org 0x7c00]
mov bp, 0x9000 ; Set stack
mov sp, bp
mov bx, MSG_REAL_MODE
call print_string
call switch_to_pm ; We will never return to here
jmp $
%include "print_string.asm"
%include "gdt.asm"
%include "print_string_pm.asm"
%include "switch_to_pm.asm"
[bits 32]
;Where we arrive after switching to PM
BEGIN_PM:
mov ebx, …Run Code Online (Sandbox Code Playgroud) “softmmu”是否意味着虚拟机具有可用于机器和用户模式的单个线性地址空间?或者它是否具有一些通过软件而不是底层处理器实现的虚拟内存功能?或者也许它意味着完全不同的东西?
我正在 Qemu 中尝试这个用于 armv5 connex 板的汇编程序。我添加两个数字并将它们存储在位置标签结果中。我无法在内存位置查看结果值 40,但寄存器值 r4 = 0x28。
.data
val1: .4byte 10
val2: .4byte 30
result: .4byte 0
.text
.align
start:
ldr r0, =val1
ldr r1, =val2
ldr r2, [r0]
ldr r3, [r1]
add r4, r2, r3
ldr r0, =result
str r4, [r0]
stop: b stop
Run Code Online (Sandbox Code Playgroud)
我的链接器脚本是
SECTIONS {
. = 0x00000000;
.text : {
*(.text);
}
.data : {
*(.data);
}
}
Run Code Online (Sandbox Code Playgroud)
输出
user@stretch:~/Desktop/Gnu_Toolchain/Data_In_Ram$ arm-none-eabi-nm -n data_in_ram.elf
00000000 t start
0000001c t stop
0000002c d val1
00000030 …Run Code Online (Sandbox Code Playgroud) 我在 root 权限下使用 termux。我的手机有 aarch64 cpu 架构。我正在尝试使用我见过的 amd64 架构来 chroot ubuntu 文件系统,这https://unix.stackexchange.com/a/222981 这是我的命令
sudo chroot ubuntu /bin/qemu-x86_64-static /bin/bash --login
我成功登录,但是当我运行命令
ls或任何命令时
它给出了一个错误,就像Exec format error
我用 qemu-x86_64-static 尝试了该命令一样,qemu-x86_64-static /bin/ls它成功执行了,有什么想法吗???
我想我可以为所有以 qemu-x86_64-static 开头的命令添加别名,但这不是一个好主意......
我已经尝试过什么?
qemu-system-x86_64 -hda hdd.img -m 1G -net nic, macaddr=MACADDR -net bridge,br=BRIDGE -enable-kvm -nographic -daemonize
qemu-system-x86_64 -hda hdd.img -m 1G -net nic, macaddr=MACADDR -net bridge,br=BRIDGE -enable-kvm -display none -daemonize
qemu-system-x86_64 -hda hdd.img -m 1G -net nic, macaddr=MACADDR -net bridge,br=BRIDGE -enable-kvm -nographic -serial mon:stdio -append 'console=ttyS0'
Run Code Online (Sandbox Code Playgroud)
MACADDR 和 BRIDGE 在我的系统中定义。
我使用过-display none -daemonize,但失败并出现错误
qemu-system-x86_64: -nographic cannot be used with -daemonize
我也尝试过-nographic -serial mon:stdio -append 'console=ttyS0',但也失败并出现错误:
Failed to initialize module: /usr/lib/x86_64-linux-gnu/qemu/block-iscsi.so
Note: only modules from the same build can …Run Code Online (Sandbox Code Playgroud) 我通过 Homebrew ( brew install qemu) 在装有 MacOS Sonoma 的 MacBook Pro M2 Pro 上下载了 QEMU。我注意到hvf加速器与qemu-system-x86_64. 我还探索了其他来宾系统,唯一支持的系统hvf是qemu-system-aarch64(即与主机系统相同的架构)。
根据QEMU的文档,MacOS应该能够支持hvf。为什么这个系统依赖?如何启用hvf其他系统(如果可能的话)?