Download raw body.
ddb disassembler call
Hi,
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 <explicit_bzero+0x1e>
/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 },
/*ea*/ { "", 0, NONE, op1(OS), 0 },
/*eb*/ { "jmp", 0, NONE, op1(Db), 0 },
ddb disassembler call