Index | Thread | Search

From:
Philip Guenther <guenther@gmail.com>
Subject:
Re: ddb disassembler call
To:
Alexander Bluhm <alexander.bluhm@gmx.net>
Cc:
tech@openbsd.org
Date:
Wed, 5 Jun 2024 18:34:07 -0700

Download raw body.

Thread
On Wed, Jun 5, 2024 at 5:54 PM Alexander Bluhm <alexander.bluhm@gmx.net> wrote:
>
> On Wed, Jun 05, 2024 at 12:00:27PM -0700, Philip Guenther wrote:
> > On Wed, Jun 5, 2024 at 8:37???AM Alexander Bluhm <bluhm@openbsd.org> wrote:
> > > -/*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...
>
> NONE also works
>
> ddb>  x/i explicit_bzero+0x14,8
> explicit_bzero+0x14:    xorl    %esi,%esi
> explicit_bzero+0x16:    movq    %r14,%rdx
> explicit_bzero+0x19:    call    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
>
> objdump calls it callq, but the operand is only 4 bytes.
> Why should there be a 'q' ?

<bikeshed>
The address is a 64bit address, even if calculated from a rel32, just
like "addq %rax,$123456" has a 'q' because it's a 64bit operation
despite the immediate operand being a 32bit value.
but mostly consistency with objdump.
Don't care that much.
</bikeshed>


> --- arch/amd64/amd64/db_disasm.c        22 Apr 2023 18:26:17 -0000      1.24
> +++ arch/amd64/amd64/db_disasm.c        6 Jun 2024 00:38:32 -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, NONE,  op1(Dl),     0 },
>  /*e9*/ { "jmp",   0, NONE,  op1(Dl),     0 },
>  /*ea*/ { "",      0, NONE,  op1(OS),     0 },
>  /*eb*/ { "jmp",   0, NONE,  op1(Db),     0 },

ok guenther@