From: Stanislav S. <st...@fi...> - 2005-11-21 22:20:36
|
Thanks for this first review, I already found the problem in RX/ERX/RRX = methods. Instead of AND with 0xF it should AND with 0x7: // 16-bit general purpose register void disassembler::RX(const x86_insn *insn) {=20 dis_sprintf("%s", general_16bit_regname[(insn->b1 & 0x7) | = insn->rex_b]); } // 32-bit general purpose register void disassembler::ERX(const x86_insn *insn) {=20 dis_sprintf("%s", general_32bit_regname[(insn->b1 & 0x7) | = insn->rex_b]); } // 64-bit general purpose register void disassembler::RRX(const x86_insn *insn) {=20 dis_sprintf("%s", general_64bit_regname[(insn->b1 & 0x7) | = insn->rex_b]); } I upload the fixed patch to #SF now. For 64-bit code you should not see it correctly for debugger because of = several reasons. The debugger totally doesn't supports x86-64, it still = works with 32-bit EIP address, have no information about long mode = executing (this is I actually could fix now), it has no access to 64-bit = registers and etc. As I said you could use instrumentation instead of = debugger. Also I would like to ask to look on the opcodes.inc file, may be you'll = see some inconsistent opcode name there ... About stand alone debugger, I think the debugger definitely should be = state less and work with Bochs through specific predefined interface. = This is not the picture now and current debugger is out-of-date. = Somebody should start to fix it, but I am not sure I have time to do it = ;( Stanislav -----Original Message----- From: boc...@li... = [mailto:boc...@li...] On Behalf Of = Brendan Trotter Sent: Monday, November 21, 2005 11:35 PM To: Stanislav Shwartsman Cc: boc...@li... Subject: Re: [Bochs-developers] Disasm supports x86-64 Hi, On 11/20/05, Stanislav Shwartsman <st...@fi...> wrote: > It is =E2=80=A6 say 90-95% clean. But I theoretically can't validate = everything so I > need you help ! I did some testing, and something's not quite right... I started by single-stepping through the Bochs BIOS's code (which is real mode code) and found that the disassembly decodes some instructions with the wrong registers. Examples: (0) [0x000fe093] f000:e093 (unk. ctxt): mov r8w, 0xfffe ; = b8feff (0) [0x000fe098] f000:e098 (unk. ctxt): mov r8w, 0x0000 ; = b80000 (0) [0x000f05e6] f000:05e6 (unk. ctxt): pop r11w ; 5b (0) [0x000f05e7] f000:05e7 (unk. ctxt): pop r13w ; 5d Then I single stepped through some 64 bit code - it seems to get the instruction sizes or prefixes wrong. Examples (lines of original source code followed by disassembly): mov esi,[bootVideoInformation] mov eax,[esi+BOOT_VIDEO.videoDepth] (0) [0x00000354] 0008:0354 (unk. ctxt): mov si, word ptr ds:[si] ; 8b34 (0) [0x0000035b] 0008:035b (unk. ctxt): mov ax, word ptr ds:[esi] ; mov r9d,[esi+BOOT_VIDEO.fontAddress8x16] mov [videoDepth],eax (0) [0x0000036e] 0008:036e (unk. ctxt): mov bp, word ptr ds:[esi+0x18] ; 678b6e18 (0) [0x00000372] 0008:0372 (unk. ctxt): inc sp ; 6744 (0) [0x00000377] 0008:0377 (unk. ctxt): inc sp ; 6744 (0) [0x0000037c] 0008:037c (unk. ctxt): mov word ptr ds:[si], ax ; 8904 shr ebx,3 cmp ecx,800 (0) [0x000003a6] 0008:03a6 (unk. ctxt): inc sp ; 44 (0) [0x000003ae] 0008:03ae (unk. ctxt): inc sp ; 44 (0) [0x000003b6] 0008:03b6 (unk. ctxt): shr bx, 0x03 ; = c1eb03 (0) [0x000003b9] 0008:03b9 (unk. ctxt): cmp cx, 0x0320 ; mov edx,esi mov edi,KSDMEMvideoMemory dec rax (0) [0x00000466] 0008:0466 (unk. ctxt): mov dx, si ; 89f2 (0) [0x00000468] 0008:0468 (unk. ctxt): mov r15w, 0x0000 ; = bf0000 (0) [0x0000046d] 0008:046d (unk. ctxt): dec r8w ; 48 > Also collecting feature requests for the disassembler, > both inside Bochs and stand-alone. If you're doing a stand-alone debugger too, let me know where I can get = it! :-) Cheers, Brendan -- BCOS Project - http://bcos.hopto.org N=18HS=C2=B5=C3=A9=C5=A0X=C2=B2=C5=A1=C2=B2=C5=A0u=C2=BC=E2=80=A6=C3=A2=C2= =A2=C3=8B=C2=9D=C3=81=C2=B4'=C2=B6'y=C3=94u=C2=ACz=08=C2=B5=C3=AA=C2=A2=C2= =B6=06=E2=80=B9N=C2=B6=C5=BE) =E2=80=B9=C2=B1=C3=A1y=C3=A0=C2=AE=C3=98=E2=80=B0=C3=86=C5=A0=E2=80=B0=C3= =85=C2=A9=C2=A2=C2=B0=E2=80=A2:=C5=A0x=E2=82=AC zwz=C3=84=C2=AE=E2=80=B9=E2=80=9EI=C2=A1=C3=BD=C3=93=E2=80=98=C2=AEjz)=C2= =A2=C3=B8=C5=A0=C3=98=C2=B6=C5=B8i=C3=9B=C2=B1=C3=99=C2=A2ov=C3=AFj |