Ja ist es. An dieser Stelle liegt die PML4T. Ich starte qemu mit "-m 2048", das sollte reichen. Außerdem teste ich ob der Speicher auch wirklich frei ist. Wo ich mir auch keinen Reim drauf machen kann ist, warum ESP so verdammt hoch ist. Bei der aktuellen Version ist ESP = 0xa680895f, also über 2GB. Vllt. hilft die Gegenüberstellung von Log und objdump weiter:
0: v=0d e=0010 i=0 cpl=0 IP=0008:0000000000100ba2 pc=0000000000100ba2 SP=0010:00000000a680895f env->regs[R_EAX]=000000006d3b16ab
EAX=6d3b16ab EBX=00009500 ECX=bffffffd EDX=193cb72b
ESI=9bbf37e6 EDI=0012b000 EBP=00106fc0 ESP=a680895f
EIP=00100ba2 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT= 00127000 00000017
IDT= 00000000 000003ff
CR0=80000011 CR2=00000000 CR3=08000000 CR4=00000020
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00000000 CCD=6d3b16ab CCO=INCL
EFER=0000000000000000
00100691 <StartImage>:
100691: 55 push %ebp
100692: 89 e5 mov %esp,%ebp
100694: 83 ec 28 sub $0x28,%esp
100697: b8 10 00 00 00 mov $0x10,%eax
10069c: 8e d8 mov %eax,%ds
10069e: 8e c0 mov %eax,%es
1006a0: 8e e0 mov %eax,%fs
1006a2: 8e e8 mov %eax,%gs
1006a4: 0f 20 e0 mov %cr4,%eax
1006a7: 83 c8 20 or $0x20,%eax
1006aa: 0f 22 e0 mov %eax,%cr4
1006ad: b9 80 00 00 c0 mov $0xc0000080,%ecx
1006b2: 0f 32 rdmsr
1006b4: 0d 00 00 00 80 or $0x80000000,%eax
1006b9: 0f 30 wrmsr
1006bb: b8 00 00 00 08 mov $0x8000000,%eax
1006c0: 0f 22 d8 mov %eax,%cr3
1006c3: 0f 20 c0 mov %cr0,%eax
1006c6: 0d 00 00 00 80 or $0x80000000,%eax
1006cb: 0f 22 c0 mov %eax,%cr0
1006ce: a1 18 70 12 00 mov 0x127018,%eax
1006d3: 89 45 f0 mov %eax,-0x10(%ebp)
1006d6: c7 45 f4 08 00 00 00 movl $0x8,-0xc(%ebp)
1006dd: f4 hlt
1006de: c7 04 24 8f 21 10 00 movl $0x10218f,(%esp)
1006e5: e8 a3 00 00 00 call 10078d <print>
1006ea: 90 nop
1006eb: c9 leave
1006ec: c3 ret
1006ed: 66 90 xchg %ax,%ax
1006ef: 90 nop
Wie man aus den Daten entnehmen kann, ist CR3 = 0x8000000. Der Code läuft also mindestens bis Zeile 0x1006c0. Gleichzeitig bis maximal 0x1006dd, denn da sollte Schluss sein. Das letzte mal wird EBP in Zeile 0x100692 geändert, da war ESP also noch normal. Also muss irgendwo dazwischen ESP um einen sehr großen Wert geändert worden sein, nur wo?
Gruß,
Streetrunner