Open
Description
博主,您好:
实践本书第3章6节(后面几节都出现这样问题)发现核心堆栈
错误,经过定位发现是
在这个地方出错,比如以7节例子中:
LABEL_SEG_CODE32:
... ...
push $(ARDSTitle) /* Display addr range descriptor struct
title */
call DispStr
add $4, %esp
call DispAddrMap /* Display system address map */
call SetupPaging /* Setup and enable paging */
push $(PMMessage)
call DispStr
add $4, %esp
... ...
把上面的代码屏蔽掉则不会出现问题。
我使用的编译系统环境是:redhat AS 4.6,内置gcc
3.4.6,实践的BOCHS版本为2.3。
在WIN2003下使用BOCHSGDB.EXE调试,出现下面这种情况:
00000000000i[APIC?] local apic in initializing
========================================================================
Bochs x86 Emulator 2.3
Build from CVS snapshot on August 27, 2006
========================================================================
00000000000i[ ] reading configuration from bochsrc.bxrc
00000000000i[ ] WARNING: syntax has changed, please use 'vgaromimage:
file=...' now
00000000000i[ ] installing win32 module as the Bochs GUI
00000000000i[ ] using log file bochsout.txt
Next at t=0
(0) [0xfffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b ; ea5be000f0
<bochs:1> vb 0x0008:0x00000000
<bochs:2> c
(7563480) Breakpoint 0, in 0008:00000000 (0x00090922)
Next at t=8830245
(0) [0x00090922] 0008:00000000 (unk. ctxt): mov ax, 0x0010 ;
66b81000
<bochs:3> u /12
00090922: ( ): mov ax, 0x0010 ; 66b81000
00090926: ( ): mov ds, ax ; 8ed8
00090928: ( ): mov ax, 0x0010 ; 66b81000
0009092c: ( ): mov es, ax ; 8ec0
0009092e: ( ): mov ax, 0x0018 ; 66b81800
00090932: ( ): mov ss, ax ; 8ed0
00090934: ( ): mov ax, 0x0020 ; 66b82000
00090938: ( ): mov gs, ax ; 8ee8
0009093a: ( ): mov esp, 0x00000200 ; bc00020000
0009093f: ( ): push 0x00000043 ; 6a43
00090941: ( ): call .+0x000002ae ; e8ae020000
00090946: ( ): add esp, 0x00000004 ; 83c404
<bochs:4> pb 0x00090941
<bochs:5> c
(0) Breakpoint 2, 0x00090941 in ?? ()
Next at t=8830255
(0) [0x00090941] 0008:0000001f (unk. ctxt): call .+0x000002ae (0x00090bf4)
; e8ae020000
<bochs:6> s
Next at t=8830255
(0) [0x00090941] 0008:001f (unk. ctxt): call .+0x000002ae (0xffff02d2) ;
e8ae020000
<bochs:7> s
Next at t=8830256
(0) [0x000fe05b] f000:e05b (unk. ctxt): xor ax, ax ; 31c0
<bochs:8> u /16
000fe05b: ( ): xor ax, ax ; 31c0
000fe05d: ( ): out 0x0d, al ; e60d
000fe05f: ( ): out 0xda, al ; e6da
000fe061: ( ): mov al, 0xc0 ; b0c0
000fe063: ( ): out 0xd6, al ; e6d6
000fe065: ( ): mov al, 0x00 ; b000
000fe067: ( ): out 0xd4, al ; e6d4
000fe069: ( ): mov al, 0x0f ; b00f
000fe06b: ( ): out 0x70, al ; e670
000fe06d: ( ): in al, 0x71 ; e471
000fe06f: ( ): mov bl, al ; 88c3
000fe071: ( ): mov al, 0x0f ; b00f
000fe073: ( ): out 0x70, al ; e670
000fe075: ( ): mov al, 0x00 ; b000
000fe077: ( ): out 0x71, al ; e671
000fe079: ( ): mov al, bl ; 88d8
<bochs:9>
因为最近在学习这些东西,很多不太明白,请博主及明白原��
�的同学告知。
Original issue reported on code.google.com by roaph...@gmail.com
on 1 Jun 2009 at 6:06