bochs

OpenBSDの親分Theo de Raadtさんがお怒りです。 OpenBSD on iTWire

Handling of CPU bugs disclosure 'incredibly bad': OpenBSD's de Raadt

その怒りが通じたのか甚大な欠陥が見つかった石、修正するようです。

Intel CEO曰く、Spectre/Meltdown脆弱性をシリコンベースで修正した製品が年内に登場

何たって、強制的に使わされていますからねぇ。原発止めて、もっとやさしいのにしたいって、 世間でせめぎ合ってるのと一緒の構図。

原発止めたって、海の上に風力発電所を作れば、世界中で必要な電力を容易に賄えるとか。どうすか、あーべちゃん、日本の底力を見せつけませんかね。呑気に、2020のオリンピック成功祈願なんかしてる場合じゃないっしょ!

じゃ、石の世界はどうする? 糞石から逃れるには、オープンソースソフトウェアならぬ、オープンソースハードウェアに限るって事で、公開された物が求められる。

オープン規格の新しい命令セットアーキテクチャRISC-V入門 ツールチェインを用意する

これ、続きが有るようなので期待しましょ。

石のプロトタイプを作るには、FPGAに焼き込むのが楽らしい。そんな事で、未踏スーパークリエーターが、独自CPUを開発してるね。

開発記録が本になって出版されてたんで、取り寄せて昔興味本位で読んでみたよ。もう一度読み直してみるかな。

xv6 on OpenBSD

前回はDebianでxv6をやった。余りリナばかりだとまずいので、BSD系でもやってみる。

$ cc -v
OpenBSD clang version 4.0.0 (tags/RELEASE_400/final) (based on LLVM 4.0.0)
Target: amd64-unknown-openbsd6.2
Thread model: posix
InstalledDir: /usr/bin
$ gcc -v
Reading specs from /usr/lib/gcc-lib/amd64-unknown-openbsd6.2/4.2.1/specs
Target: amd64-unknown-openbsd6.2
Configured with: OpenBSD/amd64 system compiler
Thread model: posix
gcc version 4.2.1 20070719

gccは棄て捨てって事で、clangが標準になってるけど、一応昔使われていたgccも残されている。makeはBSD流なので、エラーになるけど、gmakeを使えば、何とか言う事を聞いてくれた。 だが、待てど暮らせど、xv6が起動してこない。だんまりになっちゃうんだ。

gdbでmainにBPを置いて走らせても、mainまで到達していない。はて、何処で止まっているんだか、暴走してるんだか? 大げさに言うと移植作戦の発動だな。

ソフト屋さんのオシロスコープであるgdbを取り出して、問題を切り分けて行くか。症状から、 カーネルがメインメモリーに載っていない可能性があるな。幸い、前回カーネルのmainが呼び出される軌跡を追っていたので、その復習で復讐だな。

(gdb) b *0x10000c
Breakpoint 1 at 0x10000c
(gdb) c
Continuing.
The target architecture is assumed to be i386
=> 0x10000c:    mov    %cr4,%eax

Thread 1 hit Breakpoint 1, 0x0010000c in ?? ()

ここまでは信号が来てる。ああ、ハードじゃないんだから、何と言えばいいのやら? ここからは、丁寧にステップ実行。

=> 0x100020:    or     $0x80010000,%eax
0x00100020 in ?? ()
(gdb)
=> 0x100025:    mov    %eax,%cr0
0x00100025 in ?? ()
(gdb)
=> 0x100028:    Error while running hook_stop:
Cannot access memory at address 0x100028
0x00100028 in ?? ()
(gdb) info registers
eax            0x80010011       -2147418095
ecx            0x0      0
edx            0x0      0
ebx            0x0      0
esp            0x7bdc   0x7bdc
ebp            0x7bf8   0x7bf8
esi            0x10114  65812
edi            0x0      0
eip            0x100028 0x100028
eflags         0x86     [ PF SF ]
cs             0x8      8
ss             0x10     16
ds             0x10     16
es             0x10     16
fs             0x0      0
gs             0x0      0

codeで言ったら、entry.Sの

entry:
  # Turn on page size extension for 4Mbyte pages
  movl    %cr4, %eax
  orl     $(CR4_PSE), %eax
  movl    %eax, %cr4
  # Set page directory
  movl    $(V2P_WO(entrypgdir)), %eax
  movl    %eax, %cr3
  # Turn on paging.
  movl    %cr0, %eax
  orl     $(CR0_PG|CR0_WP), %eax
  movl    %eax, %cr0

  # Set up the stack pointer.
  movl $(stack + KSTACKSIZE), %esp

stack pointerにセットする所。pagingが有効になった一発目でアクセス違反を犯している。

これって、OpenBSD環境特有な事? もっと言えば、ハード相当のqemu-system-i386の不具合? それとも、ソースからバイナリィーを作るソフトウェア系の問題? 切り分けと言うか、責任分担をきっちりしたいな。そうしないと、互いに罵りあって喧嘩になりますから。

goodby gcc

ならば、小手先で出来るソフトの方から、手を付ける。gccを捨ててclang系にしよう。 gcc特約が付いたMakefileを開いて、gccってなってる所をccに変更。gasも止めてasに変更。

$ gmake
cc -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pic -O -nostdinc -I. -c bootmain.c
cc -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pic -nostdinc -I. -c bootasm.S
ld -m    elf_i386_obsd -N -e start -Ttext 0x7C00 -o bootblock.o bootasm.o bootmain.o
objdump -S bootblock.o > bootblock.asm
objcopy -S -O binary -j .text bootblock.o bootblock
./sign.pl bootblock
boot block too large: 827 bytes (max 510)
gmake: *** [Makefile:102: bootblock] Error 1

コンパイルは無事に出来上がったけど、えせMBRはサイズリミットが有って、それに引っかかり ましたとさ。ぱある君のお目付け役が目を光らせていたわい。

ものは試しと、(賄賂を贈って)お目付け役を素通りさせて、コンパイルを先に進めたら

cc -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -
Werror -fno-omit-frame-pointer -fno-stack-protector   -c -o kalloc.o kalloc.c
cc -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -
Werror -fno-omit-frame-pointer -fno-stack-protector   -c -o kbd.o kbd.c
In file included from kbd.c:4:
./kbd.h:36:10: error: use of GNU 'missing =' extension in designator
      [-Werror,-Wgnu-designator]
  [0x1D] CTL,
         ^
         =
./kbd.h:10:25: note: expanded from macro 'CTL'
#define CTL             (1<<1)
                        ^

GNUの勝手な拡張って、正にトランプ野郎みたいだな。世界を乱すだけですよ。早く辞めれ!

ってな事で、あえなく撃沈。ならばハードの方から攻めてみるか。qemuに変わるi386な糞石の 真似をするやつ。丁度、前回OSdevで紹介されてたbochsが有るじゃん。

都合が良い事に、OpenBSDでもパッケージが提供されてる。(親分のお眼鏡にかなっているんだな)

Bochs

実行アプリが4.5Mと小粒。後はBIOSのROMとかkeymapが付いてた。インストール後の注意として、/usr/local/share/bochs/bochsrc を、自HOMEに.bochsrcとしてコピーしておくといいよって、思し召しが有った。(このフィイルって工場出荷時の設定条件だな。BTO宜しく、機能追加等をしたい場合、差分を定義すれば良いと思われ)

Welcome to the Bochs IA-32 Emulator Project

Bochs によるプラットフォームのエミュレーション

あたりが参考になるかな。 説明書と言うか、configファイルが長大なので、どんなデフォルト設定になってるか、炙り出してみた。

$ grep -v '^#' .bochsrc | sed -e '/^$/d'
cpu: model=core2_penryn_t9600, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpu: cpuid_limit_winnt=0
memory: guest=512, host=256
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
mouse: enabled=0
pci: enabled=1, chipset=i440fx
clock: sync=realtime, time0=local
private_colormap: enabled=0
floppya: 1_44=/dev/rfd0a, status=inserted
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11
ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9
ata0-master: type=disk, mode=flat, path="30M.sample"
boot: disk
floppy_bootsig_check: disabled=0
log: /dev/null
panic: action=ask
error: action=report
info: action=report
debug: action=ignore, pci=report # report BX_DEBUG from module 'pci'
debugger_log: -
parport1: enabled=1, file="parport.out"
sound: driver=default, waveout=/dev/dsp. wavein=, midiout=
speaker: enabled=1, mode=sound

詳しい説明は、同ファイルを見るか、man bochsrc ってのは、お約束事項です。

一応新しいハードの受け入れ試験をやっておくか。

Disk Images with Pre-installed Systems

こちらから、4-megのLinuxを頂いてきた。

展開すると、READMEとアンケート用紙(TESTFOrM.txt)とconfigファイルとイメージが 出て来る。

$ cat bochsrc
megs: 32
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe, update_freq=15
floppya: 1_44=a.img, status=inserted
floppyb: 1_44=b.img, status=inserted
ata0-master: type=disk, path=minibootable.img, cylinders=900, heads=15, spt=17
boot: c
log: bochsout.txt
mouse: enabled=0
cpu: ips=15000000
clock: sync=slowdown

起動は次のようにする。

$ bochs -qf bochsrc
========================================================================
                       Bochs x86 Emulator 2.6.9
               Built from SVN snapshot on April 9, 2017
                  Compiled on Oct  2 2017 at 16:11:40
========================================================================
00000000000i[      ] BXSHARE not set. using compile time default '/usr/local/share/bochs'
00000000000i[      ] reading configuration from bochsrc
00000000000i[      ] installing x module as the Bochs GUI
00000000000i[      ] using log file bochsout.txt
Next at t=0
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
<bochs:1> c
========================================================================
Bochs is exiting with the following message:
[XGUI  ] POWER button turned off.
========================================================================
(0).[387195000] [0x00000010631d] 0010:00000000c010631d (unk. ctxt): cmp dword ptr ds:[ebx+20], 0x00000000 ; 837b1400

pkgから入れたbochsは、内部のdebuggerが有効になってるので、起動直後にdebuggerのメニューが出て来る。cすると、VGAな画面が出て来て、リナが起動してく、hdaの割り込みを消失したってエラーが出て、rootのプロンプトまで行かなかった。しょうがないので、電源ボタンを押して、切断したよ。

00794460000p[XGUI  ] >>PANIC<< POWER button turned off.
00794460000i[CPU0  ] CPU is in protected mode (halted)
00794460000i[CPU0  ] CS.mode = 32 bit
00794460000i[CPU0  ] SS.mode = 32 bit
00794460000i[CPU0  ] EFER   = 0x00000000
00794460000i[CPU0  ] | EAX=00000000  EBX=c01b0000  ECX=c01b0000  EDX=c0199780
00794460000i[CPU0  ] | ESP=c01b1fdc  EBP=00009000  ESI=c01b0000  EDI=c01d0820
00794460000i[CPU0  ] | IOPL=0 id vip vif ac vm rf nt of df IF tf sf ZF af PF cf
00794460000i[CPU0  ] | SEG sltr(index|ti|rpl)     base    limit G D
00794460000i[CPU0  ] |  CS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
00794460000i[CPU0  ] |  DS:0018( 0003| 0|  0) 00000000 ffffffff 1 1
00794460000i[CPU0  ] |  SS:0018( 0003| 0|  0) 00000000 ffffffff 1 1
00794460000i[CPU0  ] |  ES:0018( 0003| 0|  0) 00000000 ffffffff 1 1
00794460000i[CPU0  ] |  FS:0018( 0003| 0|  0) 00000000 ffffffff 1 1
00794460000i[CPU0  ] |  GS:0018( 0003| 0|  0) 00000000 ffffffff 1 1
00794460000i[CPU0  ] | EIP=c010631d (c010631d)
00794460000i[CPU0  ] | CR0=0x8005003b CR2=0x00000000
00794460000i[CPU0  ] | CR3=0x00101000 CR4=0x00000090
00794460000i[CMOS  ] Last time is 1517245823 (Mon Jan 29 17:10:23 2018)
00794460000i[XGUI  ] Exit
00794460000i[SIM   ] quit_sim called with exit code 1

xv6で試してみる

bochsで動かすには、PCの設定が必要。qemuスタイルの設定をbochs用に翻訳する必要が有るな。qemuの設定を改めて、分かり易いように書き下すと次のようになる。

qemu-system-i386 -nographic \
  -drive file=fs.img,index=1,media=disk,format=raw \
  -drive file=xv6.img,index=0,media=disk,format=raw \
  -smp 2 -m 512   -S -gdb tcp::26000

なんじゃらほいってのが出て来た。indexって何よ? 迷わずqemuのmanを見ると

           Instead of -hda, -hdb, -hdc, -hdd, you can use:

                   qemu-system-i386 -drive file=file,index=0,media=disk
                   qemu-system-i386 -drive file=file,index=1,media=disk
                   qemu-system-i386 -drive file=file,index=2,media=disk
                   qemu-system-i386 -drive file=file,index=3,media=disk

index番号でhd(a-d)を決めてるって事かな。取り合えず下記の設定をした。

megs: 512
#cpu:  count=2
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe, update_freq=15
ata0-master: type=disk, path=xv6.img, model=flat
ata0-slave: type=disk, path=fs.img,  model=flat
boot: disk
com1: enabled=1, mode=null
log: log.txt
mouse: enabled=0
cpu: ips=15000000

そして、2つのイメージファイルはdisk相当なんで、ちゃんと動くdebianから借りてきた。 smpにすると、ログが煩雑になるんで一つだけにしておいた。(上記cpuのコメントを外すとマルチプロセッサーになる。)

これで起動すると、cpuがbootしたってメッセージが出てからxv6のpanicに遭遇した。 VGAな画面を書き写すと

Booting from Hard Disk...
cpu0: starting 0
unexpected trap 119 from cpu 0 eip 80103a74 (cr2=0x0)
lapicid 0: panic: trap
8010593f 8010461f 80102e5f 80102f9f 0 0 0 0 0 0

こうなってしまっては、お手上げなので電源をプチィとした。

05404860000i[CPU0  ] CPU is in protected mode (active)
05404860000i[CPU0  ] CS.mode = 32 bit
05404860000i[CPU0  ] SS.mode = 32 bit
05404860000i[CPU0  ] EFER   = 0x00000000
05404860000i[CPU0  ] | EAX=00000000  EBX=8010b4bc  ECX=00000710  EDX=000003d5
05404860000i[CPU0  ] | ESP=8010b48c  EBP=8010b4c4  ESI=8010b4bc  EDI=8010b510
05404860000i[CPU0  ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf ZF af PF cf
05404860000i[CPU0  ] | SEG sltr(index|ti|rpl)     base    limit G D
05404860000i[CPU0  ] |  CS:0008( 0001| 0|  0) 00000000 ffffffff 1 1
05404860000i[CPU0  ] |  DS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
05404860000i[CPU0  ] |  SS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
05404860000i[CPU0  ] |  ES:0010( 0002| 0|  0) 00000000 ffffffff 1 1
05404860000i[CPU0  ] |  FS:0000( 0000| 0|  0) 00000000 00000000 0 0
05404860000i[CPU0  ] |  GS:0000( 0000| 0|  0) 00000000 00000000 0 0
05404860000i[CPU0  ] | EIP=801003e3 (801003e3)
05404860000i[CPU0  ] | CR0=0xe0010011 CR2=0x00000000
05404860000i[CPU0  ] | CR3=0x003ff000 CR4=0x00000010

なんか、それらしい設定になってるな。(ちゃんと起動しないのは不本意だけどね。)

続いて、OpenBSDで作ったxv6.imgに変えてみると、bochsのdebuggerが反応したよ。

<bochs:1> c
(0).[47147103] ??? (physical address not available)
Next at t=47147104
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0

ログを見ると、まだ16bitの時代をうろちょろしてる。

00047147104i[      ] dbg: Quit
00047147104i[CPU0  ] CPU is in real mode (active)
00047147104i[CPU0  ] CS.mode = 16 bit
00047147104i[CPU0  ] SS.mode = 16 bit
00047147104i[CPU0  ] EFER   = 0x00000000
00047147104i[CPU0  ] | EAX=00000000  EBX=00000000  ECX=00000000  EDX=00000000
00047147104i[CPU0  ] | ESP=00000000  EBP=00000000  ESI=00000000  EDI=00000000
00047147104i[CPU0  ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf zf af pf cf
00047147104i[CPU0  ] | SEG sltr(index|ti|rpl)     base    limit G D
00047147104i[CPU0  ] |  CS:f000( 1e00| 0|  0) ffff0000 0000ffff 0 0
00047147104i[CPU0  ] |  DS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00047147104i[CPU0  ] |  SS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00047147104i[CPU0  ] |  ES:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00047147104i[CPU0  ] |  FS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00047147104i[CPU0  ] |  GS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00047147104i[CPU0  ] | EIP=0000fff0 (0000fff0)
00047147104i[CPU0  ] | CR0=0x60000010 CR2=0x00000000
00047147104i[CPU0  ] | CR3=0x00000000 CR4=0x00000000

8.14. Using Bochs internal debuggerを見ながら、debuggerを使って見る。

<bochs:1> b 0x10000c
<bochs:2> c
(0) Breakpoint 1, 0x000000000010000c in ?? ()
Next at t=47147095
(0) [0x00000010000c] 0008:000000000010000c (unk. ctxt): mov eax, cr4              ; 0f20e0
<bochs:3> s
Next at t=47147096
(0) [0x00000010000f] 0008:000000000010000f (unk. ctxt): or eax, 0x00000010        ; 83c810
(0) [0x00000010001d] 0008:000000000010001d (unk. ctxt): mov eax, cr0              ; 0f20c0
    :
<bochs:8>
Next at t=47147101
(0) [0x000000100020] 0008:0000000000100020 (unk. ctxt): or eax, 0x80010000        ; 0d00000180
<bochs:9>
Next at t=47147102
(0) [0x000000100025] 0008:0000000000100025 (unk. ctxt): mov cr0, eax              ; 0f22c0
<bochs:10>
Next at t=47147103
(0).[47147103] ??? (physical address not available)

糞石のセグメント関係を確認出来るとな。こんな機能はgdbに有ったかなあ? 丁寧に糞石の 挙動を再現してるからこそ出来る技なんだろうね。

<bochs:11> sreg
es:0x0010, dh=0x00cf9300, dl=0x0000ffff, valid=31
        Data segment, base=0x00000000, limit=0xffffffff, Read/Write, Accessed
cs:0x0008, dh=0x00cf9b00, dl=0x0000ffff, valid=1
        Code segment, base=0x00000000, limit=0xffffffff, Execute/Read, Non-Conforming, Accessed, 32-bit
ss:0x0010, dh=0x00cf9300, dl=0x0000ffff, valid=31
        Data segment, base=0x00000000, limit=0xffffffff, Read/Write, Accessed
ds:0x0010, dh=0x00cf9300, dl=0x0000ffff, valid=11
        Data segment, base=0x00000000, limit=0xffffffff, Read/Write, Accessed
fs:0x0000, dh=0x00001000, dl=0x00000000, valid=0
gs:0x0000, dh=0x00001000, dl=0x00000000, valid=0
ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=1
tr:0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1
gdtr:base=0x0000000000007c60, limit=0x17
idtr:base=0x0000000000000000, limit=0x3ff

そして、こちらは、コントロール関係のレジスタ類。

<bochs:12> creg
CR0=0xe0010011: PG CD NW ac WP ne ET ts em mp PE
CR2=page fault laddr=0x0000000000000000
CR3=0x00000010a000
    PCD=page-level cache disable=0
    PWT=page-level write-through=0
CR4=0x00000010: pke smap smep osxsave pcid fsgsbase smx vmx osxmmexcpt umip osfxsr pce pge mce pae PSE de tsd pvi vme
CR8: 0x0
EFER=0x00000000: ffxsr nxe lma lme sce

面白い事にこのdebuggerはtrace of/off が出来る。(そんなのをschemeは仕様で要求してたな)でも、何も考えずに設定すると、膨大なログが出てくるぞ。Next at t=47147095 って、 これだけの命令を電源投入時から実行したって事だからね。

debugger_log: debuggr.out

どうしてもやりたかったら、こんな設定をconfigに書いて、ログに落とすのが吉。

bochs on debian

調子ののってdebianにもbochsを入れてみた。デフォで入れるとbochs-wxが付いてくる。お客様OSには、古いOpenBSDを選んだ。(何たって、フロッピーディスク1枚分ですからね。)

起動したら、Xのライブラリィーが無いと言われてbochsの起動を拒まれてしまった。追加で、bochs-xも入れてあげたよ。そしたら機嫌よく動いてくれた。

よく見るOpBSDの起動メッセージがつらつらと出て来て、login画面に行くかと思ったら、 インストールするかアップデートするかシェルに落ちるか選べですって。まあ、フロッピー1枚で、フルスペックのOpenBSDが動くわけないよなと、苦笑い。(傍からみたら、かなり不気味でしょう)

迷わずshellに落ちたよ。落ちたはいいけど、大した事は出来ない。しょうがないので、bochs側で待機してるdebuggerに働いてもらおう。

Ctl-Cすると、眠っていたdebuggerが起きてくる。そこで

<bochs:7> info tab
cr3: 0x0000000000420000
0xdff7f000-0xdff7ffff -> 0x0000000000420000-0x0000000000420fff
0xdff80000-0xdfffefff -> 0x0000000000423000-0x00000000004a1fff
0xdffff000-0xdfffffff -> 0x00000000011b9000-0x00000000011b9fff
0xe0100000-0xe04a1fff -> 0x0000000000100000-0x00000000004a1fff
 :
0xe3ec3000-0xe3ec3fff -> 0x000000000111c000-0x000000000111cfff
0xfff7f000-0xfff7ffff -> 0x00000000011b9000-0x00000000011b9fff
0xfff80000-0xffffefff -> 0x0000000000423000-0x00000000004a1fff

Show paging address translationを確認してみた。

<bochs:8> creg
CR0=0xe001003b: PG CD NW ac WP NE ET TS em MP PE
CR2=page fault laddr=0x0000000000220004
CR3=0x0000000000420000
    PCD=page-level cache disable=0
    PWT=page-level write-through=0
CR4=0x00000000: smep osxsave pcid fsgsbase smx vmx osxmmexcpt osfxsr pce pge mce pae pse de tsd pvi vme
CR8: 0x0
EFER=0x00000000: ffxsr nxe lma lme sce

CR3からの物理アドレスをアクセスしてみたけど、データが入っていないなあ。見てる所が違う? もう少し探求してみよう。

<bochs:20> xp/16x 0x0000000000420000
[bochs]:
0x0000000000420000 <bogus+       0>:    0x00000000      0x00000000      0x00000000      0x00000000
0x0000000000420010 <bogus+      16>:    0x00000000      0x00000000      0x00000000      0x00000000
0x0000000000420020 <bogus+      32>:    0x00000000      0x00000000      0x00000000      0x00000000
0x0000000000420030 <bogus+      48>:    0x00000000      0x00000000      0x00000000      0x00000000

debugger_logのフォーマットって指定出来ないのかな。一般用は、下記のように設定出来るみたいだけど。(debuggerを友とするような人は、自分でHackしろって事だな)

4.3.25. logprefix
Examples:

   logprefix: %t-%e-@%i-%d
   logprefix: %i%e%d
This handles the format of the string prepended to each log line. You may use those special tokens :
  %t : 11 decimal digits timer tick
  %i : 8 hexadecimal digits of current cpu eip (ignored in SMP configuration)
  %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror)
  %d : 5 characters string of the device, between brackets
  
Default is %t%e%d