This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
baffling assembly-level weirdness
- From: Mathieu Lacage <mathieu dot lacage at gmail dot com>
- To: gdb at sourceware dot org
- Date: Mon, 26 Jan 2009 16:24:40 +0100
- Subject: baffling assembly-level weirdness
hi,
The following gdb session baffles me completely: %edx is reset to zero
by the mov at address 0x0804ad62 instead of being set to the constant
0x804ad62. Of course, this code segfaults at $pc = 0x804ad68 when zero
is dereferenced...
Version: GNU gdb 6.8
(gdb) disas $pc $pc+10
Dump of assembler code from 0x804ad62 to 0x804ad6c:
0x0804ad62 <indent+50>: mov 0x805e3c0,%edx
0x0804ad68 <indent+56>: mov 0x14(%edx),%eax
0x0804ad6b <indent+59>: cmp 0x18(%edx),%eax
End of assembler dump.
(gdb) p $pc
$3 = (void (*)()) 0x804ad62 <indent+50>
(gdb) p $edx
$4 = 1
(gdb) ni
0x0804ad68 108 return _IO_putc_unlocked (__c, stdout);
(gdb) p $edx
$5 = 0
(gdb) disas $pc $pc+10
Dump of assembler code from 0x804ad68 to 0x804ad72:
0x0804ad68 <indent+56>: mov 0x14(%edx),%eax
0x0804ad6b <indent+59>: cmp 0x18(%edx),%eax
0x0804ad6e <indent+62>: jae 0x804adbe <indent+142>
0x0804ad70 <indent+64>: movb $0x20,(%eax)
End of assembler dump.
(gdb) x/20bx 0x0804ad62
0x804ad62 <indent+50>: 0x8b 0x15 0xc0 0xe3 0x05 0x08 0x8b 0x42
0x804ad6a <indent+58>: 0x14 0x3b 0x42 0x18 0x73 0x4e 0xc6 0x00
0x804ad72 <indent+66>: 0x20 0x83 0xc0 0x01
Anyone would have even a remote idea of what could have gone wrong here ?
Mathieu
--
Mathieu Lacage <mathieu.lacage@gmail.com>