Eu sei que essa pergunta já faz um tempo, mas eu tive o mesmo problema e pude resolver.
Depuração da GUI
Bochs acompanha um depurador visual que pode ser ativado com os seguintes sinalizadores em
./configure \
--enable-x86-debugger \
--enable-debugger \
--enable-debugger-gui
quando você vai criá-lo, e adicione essa opção no arquivo de configuração do Bochs:
display_library: x, options = "gui_debug"
Com o debugger gui aberto, você pode a qualquer momento pressionar o botão "break" e no menu View, você tem as opções "Physical MemDump" e "Linear MemDump", basta digitar o endereço inicial e o bochs irá despejar 4kB para você.
Sem depuração da GUI
Se preferir, você também pode usar o modo texto, o breakpoint pode ser configurado com o comando "lbreak addr" (para linear) ou "pbreak addr" (físico), para listar os breakpoints configurados basta digitar "info break "e deletá-los" d number ". Single step (s) e para continuar a execução (continue).
Com a execução em pausa, você pode descarregar com o "x" (linear) e "xp" (físico) seguido por alguns parâmetros opcionais, como o formato de saída, número de bytes e o endereço, por exemplo.
Exemplo:
x /30bx 0xC0000000
fará com que 30 bytes sejam despejados em formato hexadecimal a partir do endereço linear 0xC0000000.
Escrevendo no arquivo
Em alguns casos, o dump pode ser grande o suficiente para ser lido na tela. Nestes casos, você pode fazer isso em um arquivo usando o comando "writemem".
Sua sintaxe é:
writemem "filename" linearAddress lenght_in_bytes
então, se você precisar despejar os primeiros 1024 bytes do endereço linear 0xdeadbeef para o arquivo "dump", algo como:
writemem "dump" 0xdeadbeef 1024
deve funcionar.
Consulte o link para obter mais informações.