Last active
July 23, 2024 10:24
-
-
Save MatanShahar/1441433e19637cf1bb46b1aa38a90815 to your computer and use it in GitHub Desktop.
GDB qXfer target description for real-mode qemu
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0"?> | |
<!-- Copyright (C) 2010-2017 Free Software Foundation, Inc. | |
Copying and distribution of this file, with or without modification, | |
are permitted in any medium without royalty provided the copyright | |
notice and this notice are preserved. --> | |
<!DOCTYPE target SYSTEM "gdb-target.dtd"> | |
<target> | |
<architecture>i8086</architecture> | |
<feature name="org.gnu.gdb.i386.core"> | |
<flags id="i386_eflags" size="4"> | |
<field name="CF" start="0" end="0"/> | |
<field name="" start="1" end="1"/> | |
<field name="PF" start="2" end="2"/> | |
<field name="AF" start="4" end="4"/> | |
<field name="ZF" start="6" end="6"/> | |
<field name="SF" start="7" end="7"/> | |
<field name="TF" start="8" end="8"/> | |
<field name="IF" start="9" end="9"/> | |
<field name="DF" start="10" end="10"/> | |
<field name="OF" start="11" end="11"/> | |
<field name="NT" start="14" end="14"/> | |
<field name="RF" start="16" end="16"/> | |
<field name="VM" start="17" end="17"/> | |
<field name="AC" start="18" end="18"/> | |
<field name="VIF" start="19" end="19"/> | |
<field name="VIP" start="20" end="20"/> | |
<field name="ID" start="21" end="21"/> | |
</flags> | |
<reg name="eax" bitsize="32" type="int32"/> | |
<reg name="ecx" bitsize="32" type="int32"/> | |
<reg name="edx" bitsize="32" type="int32"/> | |
<reg name="ebx" bitsize="32" type="int32"/> | |
<reg name="esp" bitsize="32" type="data_ptr"/> | |
<reg name="ebp" bitsize="32" type="data_ptr"/> | |
<reg name="esi" bitsize="32" type="int32"/> | |
<reg name="edi" bitsize="32" type="int32"/> | |
<reg name="eip" bitsize="32" type="code_ptr"/> | |
<reg name="eflags" bitsize="32" type="i386_eflags"/> | |
<reg name="cs" bitsize="32" type="int32"/> | |
<reg name="ss" bitsize="32" type="int32"/> | |
<reg name="ds" bitsize="32" type="int32"/> | |
<reg name="es" bitsize="32" type="int32"/> | |
<reg name="fs" bitsize="32" type="int32"/> | |
<reg name="gs" bitsize="32" type="int32"/> | |
<reg name="st0" bitsize="80" type="i387_ext"/> | |
<reg name="st1" bitsize="80" type="i387_ext"/> | |
<reg name="st2" bitsize="80" type="i387_ext"/> | |
<reg name="st3" bitsize="80" type="i387_ext"/> | |
<reg name="st4" bitsize="80" type="i387_ext"/> | |
<reg name="st5" bitsize="80" type="i387_ext"/> | |
<reg name="st6" bitsize="80" type="i387_ext"/> | |
<reg name="st7" bitsize="80" type="i387_ext"/> | |
<reg name="fctrl" bitsize="32" type="int" group="float"/> | |
<reg name="fstat" bitsize="32" type="int" group="float"/> | |
<reg name="ftag" bitsize="32" type="int" group="float"/> | |
<reg name="fiseg" bitsize="32" type="int" group="float"/> | |
<reg name="fioff" bitsize="32" type="int" group="float"/> | |
<reg name="foseg" bitsize="32" type="int" group="float"/> | |
<reg name="fooff" bitsize="32" type="int" group="float"/> | |
<reg name="fop" bitsize="32" type="int" group="float"/> | |
</feature> | |
<feature name="org.gnu.gdb.i386.32bit.sse"> | |
<vector id="v4f" type="ieee_single" count="4"/> | |
<vector id="v2d" type="ieee_double" count="2"/> | |
<vector id="v16i8" type="int8" count="16"/> | |
<vector id="v8i16" type="int16" count="8"/> | |
<vector id="v4i32" type="int32" count="4"/> | |
<vector id="v2i64" type="int64" count="2"/> | |
<union id="vec128"> | |
<field name="v4_float" type="v4f"/> | |
<field name="v2_double" type="v2d"/> | |
<field name="v16_int8" type="v16i8"/> | |
<field name="v8_int16" type="v8i16"/> | |
<field name="v4_int32" type="v4i32"/> | |
<field name="v2_int64" type="v2i64"/> | |
<field name="uint128" type="uint128"/> | |
</union> | |
<flags id="i386_mxcsr" size="4"> | |
<field name="IE" start="0" end="0"/> | |
<field name="DE" start="1" end="1"/> | |
<field name="ZE" start="2" end="2"/> | |
<field name="OE" start="3" end="3"/> | |
<field name="UE" start="4" end="4"/> | |
<field name="PE" start="5" end="5"/> | |
<field name="DAZ" start="6" end="6"/> | |
<field name="IM" start="7" end="7"/> | |
<field name="DM" start="8" end="8"/> | |
<field name="ZM" start="9" end="9"/> | |
<field name="OM" start="10" end="10"/> | |
<field name="UM" start="11" end="11"/> | |
<field name="PM" start="12" end="12"/> | |
<field name="FZ" start="15" end="15"/> | |
</flags> | |
<reg name="xmm0" bitsize="128" type="vec128" regnum="32"/> | |
<reg name="xmm1" bitsize="128" type="vec128"/> | |
<reg name="xmm2" bitsize="128" type="vec128"/> | |
<reg name="xmm3" bitsize="128" type="vec128"/> | |
<reg name="xmm4" bitsize="128" type="vec128"/> | |
<reg name="xmm5" bitsize="128" type="vec128"/> | |
<reg name="xmm6" bitsize="128" type="vec128"/> | |
<reg name="xmm7" bitsize="128" type="vec128"/> | |
<reg name="mxcsr" bitsize="32" type="i386_mxcsr" group="vector"/> | |
</feature> | |
</target> |
I can confirm that the issue faced by @schierlm occurs on Manjaro linux as well:
emote 'g' packet reply is too long (expected 308 bytes, got 344 bytes): 0000000000000000630600000000000000000000000000000000000000000000f0ff00000200000000f00000000000000000000000000000000000000000000000000000000000000000000010000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000
qemu:
QEMU emulator version 4.2.0
gdb:
GNU gdb (GDB) 9.1
me, too.
(gdb) set tdesc filename target.xml
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB. Attempting to continue with the default i8086 settings.
Remote 'g' packet reply is too long: 000000000000000000000000000000000000000000000000e306050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0ff0000000000000200000000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000
qemu: QEMU emulator version 4.2.94
gdb: GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
@meilihao That happens if the GDB you are debugging with differs to the GDB server you're connecting to. I have found setting the architecture your debugging GDB is using (with set architecture <arch>
) fixes this issue
@rybot666, i cant not set arch.
(gdb) set arch i8086
warning: Selected architecture i8086 is not compatible with reported target architecture i386:x86-64
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB. Attempting to continue with the default i8086 settings.
Architecture `i8086' not recognized.
The target architecture is set automatically (currently i386:x86-64)
@rybot666 This also does not seem to fix the issue for me:
(gdb) set architecture i8086
The target architecture is assumed to be i8086
(gdb) target remote :1234
Remote debugging using :1234
warning: No executable has been specified and target does not support
determining executable automatically. Try using the "file" command.
Remote 'g' packet reply is too long (expected 308 bytes, got 344 bytes): 0000000000000000630600000000000000000000000000000000000000000000f0ff00000200000000f00000000000000000000000000000000000000000000000000000000000000000000010000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000
It may be that the given target.xml is out of date and modern QEMU (I'm using 4.2.0) has changed how it reports data.
This works for me:
$ echo '<?xml version="1.0"?><!DOCTYPE target SYSTEM "gdb-target.dtd"><target><architecture>i8086</architecture><xi:include href="i386-32bit.xml"/></target>' > target.xml
$ wget https://raw.githubusercontent.com/qemu/qemu/master/gdb-xml/i386-32bit.xml
and then:
(gdb) target remote localhost:26000
[...]
Breakpoint 1, 0x00007c00 in ?? ()
(gdb) x /5i 0x7c24
0x7c24: cli
0x7c25: cld
0x7c26: mov eax,0xc08e0050
0x7c2b: xor ebx,ebx
0x7c2d: mov al,0x2
(gdb) set tdesc filename target.xml
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB. Attempting to continue with the default i8086 settings.
(gdb) x /5i 0x7c24
0x7c24: cli
0x7c25: cld
0x7c26: mov ax,0x50
0x7c29: mov es,ax
0x7c2b: xor bx,bx
Solution from @x746e works for me too
qemu:
QEMU emulator version 6.1.0
gdb:
GNU gdb (GDB) 10.2
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
When trying to load this using
set tdesc filename ./target.xml
, I get this:qemu 4.2.0 on Windows
and