![如何在 Bochs 中进行内存转储?](https://linux22.com/image/1281738/%E5%A6%82%E4%BD%95%E5%9C%A8%20Bochs%20%E4%B8%AD%E8%BF%9B%E8%A1%8C%E5%86%85%E5%AD%98%E8%BD%AC%E5%82%A8%EF%BC%9F.png)
如何进行内存转储波克斯?
(无论是物理的还是虚拟的——但两个都会更好!)
答案1
我知道这个问题已经存在一段时间了,但我遇到了同样的问题并且可以解决。
图形用户界面调试
Bochs 附带一个可视化调试器,可以使用以下标志激活它
./configure \
--enable-x86-debugger \
--enable-debugger \
--enable-debugger-gui
当您构建它时,请在您的 Bochs 配置文件中添加此选项:
display_library: x, options = "gui_debug"
打开 GUI 调试器后,您可以随时按“break”按钮,在 View 菜单中,您有“Physical MemDump”和“Linear MemDump”选项,只需输入起始地址,bochs 就会为您转储 4kB。
无 GUI 调试
如果您愿意,您也可以使用文本模式,可以使用命令“lbreak addr”(线性)或“pbreak addr”(物理)设置断点,要列出配置的断点,只需输入“info break”,要删除它们,只需输入“d number”。单步(s)并继续执行(continue)。
在执行暂停的情况下,您可以使用“x”(线性)和“xp”(物理)进行转储,后跟一些可选参数,例如输出格式、字节数和地址。
例子:
x /30bx 0xC0000000
将从线性地址 0xC0000000 开始以十六进制格式转储 30 个字节。
在文件中写入
在某些情况下,转储可能足够大,可以在屏幕上读取。在这些情况下,您可以使用命令“writemem”将其写入文件。
它的语法是:
writemem "filename" linearAddress lenght_in_bytes
因此如果您需要将线性地址 0xdeadbeef 的前 1024 个字节转储到“转储”文件中,则类似于:
writemem "dump" 0xdeadbeef 1024
应该管用。
请参阅http://bochs.sourceforge.net/doc/docbook/user/internal-debugger.html了解更多信息。
答案2
答案3
在 Bochs 控制台中尝试memsave
命令。pmemsave
'
memsave addr size file
'保存从大小为 size 的 addr 开始的磁盘虚拟内存转储。
'
pmemsave addr size file
'保存从大小为 size 的 addr 开始的物理内存转储到磁盘。
答案4
显然有writemem
writemem dump a number of bytes of virtual memory starting from
the specified linear address into a file
但它似乎不起作用。