From: Stanislav S. <stl...@gm...> - 2010-01-10 14:13:55
|
> The printed offset is wrong, but i expected it because i have modified linear_sp. The printed offset is SS.BASE + offset, which is correct linear SP ... Stanislav -----Original Message----- From: Sebastian Herbszt [mailto:he...@gm...] Sent: Sunday, January 10, 2010 2:58 PM To: Stanislav Shwartsman; boc...@li... Subject: Re: [Bochs-developers] bx_debug and print-stack Stanislav Shwartsman wrote: >I should see your test program and look what are you actually doing. The test program (16-bit real mode) gets loaded at 0x33100 and is <bochs:11> disasm /7 0x33100 00033100: ( ): mov ax, 0x1234 ; b83412 00033103: ( ): push ax ; 50 00033104: ( ): mov ax, 0x5678 ; b87856 00033107: ( ): push ax ; 50 00033108: ( ): pop ax ; 58 00033109: ( ): pop ax ; 58 0003310a: ( ): int 0x20 ; cd20 on entry the registers are as follows <bochs:13> r rax: 0x00000000:00003300 rcx: 0x00000000:0000000c rdx: 0x00000000:00000580 rbx: 0x00000000:c5390100 rsp: 0x00000000:0000fffe rbp: 0x00000000:00032ca2 rsi: 0x00000000:1fea0000 rdi: 0x00000000:00000083 r8 : 0x00000000:00000000 r9 : 0x00000000:00000000 r10: 0x00000000:00000000 r11: 0x00000000:00000000 r12: 0x00000000:00000000 r13: 0x00000000:00000000 r14: 0x00000000:00000000 r15: 0x00000000:00000000 rip: 0x00000000:00000100 eflags 0x00000246: id vip vif ac vm rf nt IOPL=0 of df IF tf sf ZF af PF cf <bochs:14> sreg es:0x3300, dh=0x00009303, dl=0x3000ffff, valid=1 Data segment, base=0x00033000, limit=0x0000ffff, Read/Write, Accessed cs:0x3300, dh=0x00009303, dl=0x3000ffff, valid=1 Data segment, base=0x00033000, limit=0x0000ffff, Read/Write, Accessed ss:0x3300, dh=0x00009303, dl=0x3000ffff, valid=7 Data segment, base=0x00033000, limit=0x0000ffff, Read/Write, Accessed ds:0x3300, dh=0x00009303, dl=0x3000ffff, valid=1 Data segment, base=0x00033000, limit=0x0000ffff, Read/Write, Accessed fs:0x9c72, dh=0x00009309, dl=0xc720ffff, valid=1 Data segment, base=0x0009c720, limit=0x0000ffff, Read/Write, Accessed gs:0x9c72, dh=0x00009309, dl=0xc720ffff, valid=1 Data segment, base=0x0009c720, limit=0x0000ffff, Read/Write, Accessed ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=0 tr:0x0008, dh=0x00008b00, dl=0x05800067, valid=1 gdtr:base=0x000000000000b160, limit=0x2f idtr:base=0x0000000000000000, limit=0xffff so the stack is at 0x3300:0xfffe After the first "push ax" i have <bochs:17> print-stack 4 Stack address size 2 | STACK 0xfffc [0x0000] | STACK 0xfffe [0x0000] | STACK 0x10000 [0x0000] | STACK 0x10002 [0x0000] ss:sp is 0x3300:0xfffc <bochs:24> x/1h 0x3300:0xfffc [bochs]: 0x0000000000042ffc <bogus+ 0>: 0x1234 > bx_dbg_read_linear is too generic, I don't believe it doesn't work. You > won't boot anything if it is the case. > Are you on big endian host (this might be real issue) ? Vista 32-bit host with Intel cpu. If i change the code in dbg_main.c like the following i get the correct values else { // linear_sp = BX_CPU(dbg_cpu)->get_reg16(BX_16BIT_REG_SP); linear_sp = BX_CPU(dbg_cpu)->sregs[BX_SEG_REG_SS].cache.u.segment.base + BX_CPU(dbg_cpu)->get_reg16(BX_16BIT_REG_SP); len = 2; } } <bochs:5> print-stack 4 Stack address size 2 | STACK 0x42ffc [0x1234] | STACK 0x42ffe [0x0000] | STACK 0x43000 [0x0000] | STACK 0x43002 [0x0000] The printed offset is wrong, but i expected it because i have modified linear_sp. - Sebastian |