From: Philip Guenther Subject: Re: ddb disassembler call To: Alexander Bluhm Cc: tech@openbsd.org Date: Wed, 5 Jun 2024 12:00:27 -0700 On Wed, Jun 5, 2024 at 8:37 AM Alexander Bluhm wrote: > Disassembling the amd64 call instruction in ddb creates wrong output. > The operand of e8 is only 4 bytes long, not 8. > > objdump -Wl -d obj/explicit_bzero.o > /home/bluhm/openbsd/cvs/src/sys/lib/libkern/explicit_bzero.c:19 > 44: 31 f6 xor %esi,%esi > 46: 4c 89 f2 mov %r14,%rdx > 49: e8 00 00 00 00 callq 4e > /home/bluhm/openbsd/cvs/src/sys/lib/libkern/explicit_bzero.c:20 > 4e: 4c 89 ff mov %r15,%rdi > 51: 4c 89 f6 mov %r14,%rsi > 54: 41 5e pop %r14 > 56: 41 5f pop %r15 > 58: c9 leaveq > > buggy ddb > ddb> x/i explicit_bzero+0x14,7 > explicit_bzero+0x14: xorl %esi,%esi > explicit_bzero+0x16: movq %r14,%rdx > explicit_bzero+0x19: callq memset+0x4 > explicit_bzero+0x22: movl %esi,%esi > explicit_bzero+0x24: popq %r14 > explicit_bzero+0x26: popq %r15 > explicit_bzero+0x28: leave > > ddb with fix below > ddb> x/i explicit_bzero+0x14,8 > explicit_bzero+0x14: xorl %esi,%esi > explicit_bzero+0x16: movq %r14,%rdx > explicit_bzero+0x19: calll memset > explicit_bzero+0x1e: movq %r15,%rdi > explicit_bzero+0x21: movq %r14,%rsi > explicit_bzero+0x24: popq %r14 > explicit_bzero+0x26: popq %r15 > explicit_bzero+0x28: leave > > ok? > > bluhm > > Index: arch/amd64/amd64/db_disasm.c > =================================================================== > RCS file: /data/mirror/openbsd/cvs/src/sys/arch/amd64/amd64/db_disasm.c,v > diff -u -p -r1.24 db_disasm.c > --- arch/amd64/amd64/db_disasm.c 22 Apr 2023 18:26:17 -0000 1.24 > +++ arch/amd64/amd64/db_disasm.c 5 Jun 2024 15:31:05 -0000 > @@ -793,7 +793,7 @@ struct inst db_inst_table[256] = { > /*e6*/ { "out", 0, BYTE, op2(A, Ib), 0 }, > /*e7*/ { "out", 0, LONG, op2(A, Ib) , 0 }, > > -/*e8*/ { "call", 0, QUAD, op1(Dl), 0 }, > +/*e8*/ { "call", 0, LONG, op1(Dl), 0 }, > /*e9*/ { "jmp", 0, NONE, op1(Dl), 0 }, Shouldn't it be NONE like jmp? Or maybe "callq", 0, NONE to look better...