[x86] instruction length berechnen



  • Hallo

    ich verzweifle grade an der länge der x86-befehlen.
    teilweise können die ja sogar 13 bytes! lang werden.

    ich suche da eine tabelle oder mehode von einem opcode-stream
    die länge einer einzelnen anweisung zu berechnen.

    einige befehle codieren im ersten byte ihre länge, manche auch im zweiten.
    gibt es da nicht irgenteine möglichkeit?

    z.b.

    bool one_size_instrction[] = {true, false...};

    if (one_size_instruction[instruction[0]])
    if (two_size_instruction[instruction[0]][instruction[1]])

    einen einfachen weg das zu berechnen. ob asm, c, is egal, es sollte nur keine
    komplette decoder-lib sein (länge reicht, instr. selber is egal).

    MfG sizer



  • Um das dekodieren kommst du nicht herum! Die Länge hängt vom Opcode, Prefixes, Operanten und Art der Adressierung ab. Im Ganzen ist das nicht trivial - von daher empfehle ich dir eine disassembler library wie z.B. distorm zu verwenden.



  • Die Befehle können übrigens länger als 13 Bytes sein, nämlich 17



  • Falsch! Sowohl bei Intel als auch bei AMD ist das Limit 15 Byte.



  • __asm{} schrieb:

    Falsch! Sowohl bei Intel als auch bei AMD ist das Limit 15 Byte.

    Quelle? Meine Quelle ist "Computer Organization" von Patterson & Hennessy.



  • ASM-Hacker schrieb:

    Meine Quelle ist "Computer Organization" von Patterson & Hennessy.

    Haben sie in deiner Quelle einfach nur 4+3+1+1+4+4 zusammengezählt? Poste mal einen 3-Byte-Opcode dessen Immediate > 1 Byte ist.

    x86 👍



  • ASM-Hacker schrieb:

    Quelle?

    Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M schrieb:

    The instruction-size limit of 15 bytes still applies to instructions
    with a REX prefix.

    AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions schrieb:

    An instruction can be between one and 15 bytes in length.



  • hm schade, dachte nicht, dass das soooo kompilziert ist.

    naja vielen dank für den link __asm{} 👍
    das teil sieht gut aus und hat ein übersichtliches interface 🙂

    MfG sizer



  • sizer schrieb:

    ...das teil sieht gut aus und hat ein übersichtliches interface 🙂

    Welches Teil meinst Du? AMD64?



  • ich mein die lib, distorm.

    getestet und funzt. und flott ist sie auch noch 😉


Anmelden zum Antworten