⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disasmtables.pas

📁 用delphi实现反汇编测控专家 用于各个行业的高技术仪表
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit DisAsmTables;

interface

{ Code First character after #:
      A: Direct Address.
      C: Reg field in ModRm specifies Control register.
      D: Reg field in ModRm specifies Debug register.
      E: General purpose register or memory address specified in the ModRM byte.
      F: EFlags register
      G: Reg field in ModRM specifies a general register
      H: Signed immidiate data
      I: Imidiate data
      J: Relative jump Offset
      M: memory address spcified in the ModRM byte.
      O: Relative Offset Word or DWord
      P: Reg field in ModRM specifies a MMX register
      Q: MMX register or memory address specified in the ModRM byte.
      R: general purpose register specified in the ModRM byte.
      S: Reg field in ModRM specifies a Segment register
      T: Reg field in ModRM specifies a MMX register
      P: Seg prefix override.

  Second character after #
      a: two Word or two DWord, only used by BOUND
      b: Byte.
      c: Byte or word
      d: DWord
      p: 32 or 16 bit pointer
      q: QWord
      s: 6Byte
      v: Word or DWord
      w: Word
      t: Tera byte

  Third character after #
      j: jump Operand (Relative or absolute)

  First character after @
      e: used by register (@eax, @esp ..) return e with the character following when
         operand size = 4 ortherwise only the following character.
      g: Group, return the group insruction specified by OperandType
         and the reg field of the ModRM byte.
      h: Operand for group, return operands for the group insruction specified
         by OperandType and the reg field of the ModRM byte.
      m: Must have size, Size indicator always set.
      o: Operand size, returns the name (bwdq) of the number following, divided
         by two when operand size <> 4.
      p: Seg prefix override. Sets the prefix to the following charchter + 's'
      s: Size override (address or operand).
         follow by o: operand size override
                   a: address size override

  First character after %
      c: Use the opcode instead in addition to the assembler instruction
}
      
const
     OneByteOpCodes: Array [Char] of String =
       // 0
       ('add     #Eb , #Gb ',
        'add     #Ev , #Gv ',
        'add     #Gb , #Eb ',
        'add     #Gv , #Ev ',
        'add     al, #Hb ',
        'add     @eax, #Hv ',
        'push    es',
        'pop     es',
        'or      #Eb , #Gb ',
        'or      #Ev , #Gv ',
        'or      #Gb , #Eb ',
        'or      #Gv , #Ev ',
        'or      al, #Ib ',
        'or      @eax, #Iv ',
        'push    cs',        
        '@c2',
       // 1
        'adc     #Eb , #Gb ',
        'adc     #Ev , #Gv ',
        'adc     #Gb , #Eb ',
        'adc     #Gv , #Ev ',
        'adc     al, #Ib ',
        'adc     @eax, #Iv ',
        'push    ss',
        'pop     ss',
        'sbb     #Eb , #Gb ',
        'sbb     #Ev , #Gv ',
        'sbb     #Gb , #Eb ',
        'sbb     #Gv , #Ev ',
        'sbb     al, #Ib ',
        'sbb     @eax, #Iv ',
        'push    ds',
        'pop     ds',
       // 2
        'and     #Eb , #Gb ',
        'and     #Ev , #Gv ',
        'and     #Gb , #Eb ',
        'and     #Gv , #Ev ',
        'and     al, #Ib ',
        'and     @eax, #Iv ',
        '@pe',
        'daa',
        'sub     #Eb , #Gb ',
        'sub     #Ev , #Gv @m ',
        'sub     #Gb , #Eb ',
        'sub     #Gv , #Ev @m ',
        'sub     al, #Ib ',
        'sub     @eax, #Iv ',
        '@pc',
        'das',
       // 3
        'xor     #Eb , #Gb ',
        'xor     #Ev , #Gv ',
        'xor     #Gb , #Eb ',
        'xor     #Gv , #Ev ',
        'xor     al, #Ib ',
        'xor     @eax, #Iv ',
        '@ps',
        'aaa',
        'cmp     #Eb , #Gb ',
        'cmp     #Ev , #Gv ',
        'cmp     #Gb , #Eb ',
        'cmp     #Gv , #Ev ',
        'cmp     al, #Ib ',
        'cmp     @eax, #Iv ',
        '@pd',
        'aas',
       // 4
        'inc     @eax',
        'inc     @ecx',
        'inc     @edx',
        'inc     @ebx',
        'inc     @esp',
        'inc     @ebp',
        'inc     @esi',
        'inc     @edi',
        'dec     @eax',
        'dec     @ecx',
        'dec     @edx',
        'dec     @ebx',
        'dec     @esp',
        'dec     @ebp',
        'dec     @esi',
        'dec     @edi',
       // 5
        'push    @eax',
        'push    @ecx',
        'push    @edx',
        'push    @ebx',
        'push    @esp',
        'push    @ebp',
        'push    @esi',
        'push    @edi',
        'pop     @eax',
        'pop     @ecx',
        'pop     @edx',
        'pop     @ebx',
        'pop     @esp',
        'pop     @ebp',
        'pop     @esi',
        'pop     @edi',
       // 6
        'pusha',
        'popa',
        'bound   #Gv , #Ma ',
        'arpl    #Ew , #Gw ',
        '@pf',
        '@pg',
        '@so',
        '@sa',
        'push    #Iv ',
        'imul    #Gv , #Ev , #Iv ',
        'push    #Ib ',
        'imul    #Gv , #Ev , #Ib ',
        'insb',
        'ins@o4',
        'outsb',
        'outs@o4',
       // 7
        'jo      #Jbj',
        'jno     #Jbj',
        'jb      #Jbj',
        'jnb     #Jbj',
        'jz      #Jbj',
        'jnz     #Jbj',
        'jbe     #Jbj',
        'jnbe    #Jbj',
        'js      #Jbj',
        'jns     #Jbj',
        'jp      #Jbj',
        'jnp     #Jbj',
        'jl      #Jbj',
        'jnl     #Jbj',
        'jle     #Jbj',
        'jnle    #Jbj',
       // 8
        '@ga#Eb , #Ib ',
        '@ga#Ev , #Iv ',
        '@ga#Ev , #Ib ',
        '@ga#Ev , #Hb ',
        'test    #Eb , #Gb ',
        'test    #Ev , #Gv ',
        'xchg    #Eb , #Gb ',
        'xchg    #Ev , #Gv ',
        'mov     #Eb , #Gb ',
        'mov     #Ev , #Gv ',
        'mov     #Gb , #Eb ',
        'mov     #Gv , #Ev ',
        'mov     #Ew , #Sw ',
        'lea     #Gv , #M  ',
        'mov     #Sw , #Ew ',
        'pop     #Ev ',
       // 9
        'nop',
        'xchg    eax, @ecx',
        'xchg    eax, @edx',
        'xchg    eax, @ebx',
        'xchg    eax, @esp',
        'xchg    eax, @ebp',
        'xchg    eax, @esi',
        'xchg    eax, @edi',
        'c@o2@o4@e ',
        'c@o4@o8',
        'call    #Ap ',
        'wait',
        'pushf   #Fv ',
        'pop     #Fv ',
        'sahf',
        'lahf',
       // A
        'mov     al, #Ob ',
        'mov     @eax, #Ov ',
        'mov     #Ob , al',
        'mov     #Ov , @eax',
        'movsb',
        'movs@o4',
        'cmpsb',
        'cmps@o4',
        'test    al, #Ib ',
        'test    @eax, #Iv ',
        'stosb',
        'stos@o4',
        'lodsb',
        'lods@o4',
        'scasb',
        'scas@o4',
       // B
        'mov     al, #Ib ',
        'mov     cl, #Ib ',
        'mov     dl, #Ib ',
        'mov     bl, #Ib ',
        'mov     ah, #Ib ',
        'mov     ch, #Ib ',
        'mov     dh, #Ib ',
        'mov     bh, #Ib ',
        'mov     @eax, #Iv ',
        'mov     @ecx, #Iv ',
        'mov     @edx, #Iv ',
        'mov     @ebx, #Iv ',
        'mov     @esp, #Iv ',
        'mov     @ebp, #Iv ',
        'mov     @esi, #Iv ',
        'mov     @edi, #Iv ',
       // C
        '@gb#Eb , #Ib ',
        '@gb#Ev , #Ib ',
        'ret     #Iw ',
        'ret',
        'les     #Gv , #Mp ',
        'lds     #Gv , #Mp ',
        'mov     #Eb , #Ib ',
        'mov     #Ev , #Iv ',
        'enter   #Lw , #Ib ',
        'leave',
        'ret     #Lw ',
        'ret',
        'int     3',
        'int     #Ib ',
        'into',
        'iret',
       // D
        '@gb#Eb , 1',
        '@gb#Ev , 1',
        '@gb#Eb , cl',
        '@gb#Ev , cl',
        'aam',
        'aad',
        '%c ',
        'xlat',
        '@ca',
        '@cb',
        '@cc',
        '@cd',
        '@ce',
        '@cf',
        '@cg',
        '@ch',
       // E
        'loopn   #Jbj',
        'loope   #Jbj',
        'loop    #Jbj',
        'jcxz    #Jbj',
        'in      al, #Ib ',
        'in      @eax, #Ib ',
        'out     #Ib , al',
        'out     #Ib , @eax',
        'call    #Jvc',
        'jmp     #Jvj',
        'jmp     #Ap ',
        'jmp     #Jbj',
        'in      al, dx',
        'in      @eax, dx',
        'out     dx, al',
        'out     dx, @eax',
       // F
        'lock',
        '%c ',
        'repne',
        'rep',
        'hlt',
        'cmc',
        '@gc#Eb @h1',
        '@gc#Ev @h2 ',
        'clc',
        'stc',
        'cli',
        'sti',
        'cld',
        'std',
        '@gd@h3',
        '@ge@h4');

     TwoByteOpCodes: Array [Char] of String =
       // 0
       ('@gf',
        '%c ',
        'lar     #Gv , #Ew ',
        'lsl     #Gv , #Ew ',
        '%c ',
        '%c ',
        'ctls',
        '%c ',
        'invd',
        'wbinvd',
        '%c ',
        'ud2',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
       // 1
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
       // 2
        'mov     #Rd , #Cd ',
        'mov     #Rd , #Dd ',
        'mov     #Cd , #Rd ',
        'mov     #Dd , #Cd ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
       // 3
        'wrmsr',
        'rdtsc',
        'rdmsr',
        'rdpmc',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
       // 4
        'cmovo   #Gv , #Ev ',
        'cmovno  #Gv , #Ev ',
        'cmovb   #Gv , #Ev ',
        'cmovnb  #Gv , #Ev ',
        'cmove   #Gv , #Ev ',
        'cmovne  #Gv , #Ev ',
        'cmovbe  #Gv , #Ev ',
        'cmovnbe #Gv , #Ev ',
        'cmovs   #Gv , #Ev ',
        'cmovns  #Gv , #Ev ',
        'cmovp   #Gv , #Ev ',
        'cmovnp  #Gv , #Ev ',
        'cmovl   #Gv , #Ev ',
        'cmovnl  #Gv , #Ev ',
        'cmovle  #Gv , #Ev ',
        'cmovnle #Gv , #Ev ',
       // 5
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
        '%c ',
       // 6
        'punpcklbw  #Pq , #Qd ',
        'punpcklwd  #Pq , #Qd ',
        'punpckldq  #Pq , #Qd ',
        'packusdw   #Pq , #Qd ',
        'pcmpgtb    #Pq , #Qd ',
        'pcmpgtw    #Pq , #Qd ',

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -