彙編指令和機器碼的對應表

一、彙編速查   
      MOV   AA,BB         將   BB   放到   AA   裏   
      CALL                   調用子程序   (相當於   BASIC   的   GOSUB)   
      RET   與   RETF     返回程序       (相當於   BASIC   的   RETURN)   
      CMP   XX,YY         比較   XX   與   YY   
      JZ                       若相等則轉移   
      JNZ                     若不相等則轉移   
      JB                       若小於則轉移   
      JG                       若大於則轉移   
      JMP                     無條件轉移   
      J???                   (各種轉移指令)   
      LOOP                   循環直到CX爲0   
      INT   XX               類似   CALL   的中斷涵數   
  PUSH   推入棧(STACK)ESP:PUSH   AX     
  POP   出棧ESP:POP   CX     
  XCHG   交換ESP:XCHG   AX,BX     
  IN、OUT   與PORT有關的IN/OUT     
  XLAT   查表     
  LEA   段內偏移量。ESP:LEA   AX,AREA1=MOV   AX,OFFSET   AREA1     
  LAHF、SAHF與棋標有關的寄存器   AH     
  PUSHF、POPF將棋標入/出棧     
  ADD   ESP   ADD   AX,CX   (AX=AX+CX)     
  ADC   加入棋標C的ADD     
  INC   ESP   INC   AX(AX=AX+1)     
  AAA   加法校正     
  SUB、SBB   減法     
  DEC   ESP:   DEC   AX(AX=AX-1)     
  NEG   去補,     
  MUL、IMUL   乘     
  DIV、IDIV   除     
  SHR、SAR、SHL   算術、邏輯位移R=RIGHT   L=LEFT     
  OR、XOR、AND   邏輯運算   ESP   :XOR   AX,AX(AX=0)      


直接標誌轉移   
  指令格式     機器碼     測試條件     如...則轉移      
     JC             72             C=1                 有進位     
    JNS           79             S=0                 正號     
    JNC           73             C=0                 無進位     
    JO             70             O=1                 有溢出     
    JZ/JE       74             Z=1                 零/等於   
    JNO           71             O=0                 無溢出     
    JNZ/JNE   75             Z=0                 不爲零/不等於   
    JP/JPE     7A             P=1                 奇偶位爲偶     
    JS             78             S=1                 負號   

    JNP/IPO   7B             P=0                 奇偶位爲奇


     

  間接標誌轉移   
  指令格式                                 機器碼                   測試格式                         如...則轉移     
  JA/JNBE(比較無符號數)       77                           C或Z=0   >                      高於/不低於或等於     
  JAE/JNB(比較無符號數)       73                           C=0   >=                          高於或等於/不低於     
  JB/JNAE(比較無符號數)       72                           C=1   <                            低於/不高於或等於     
  JBE/JNA(比較無符號數)       76                           C或Z=1   <=                    低於或等於/不高於     
  JG/JNLE(比較帶符號數)       7F                           (S異或O)或Z=0   >     大於/不小於或等於     
  JGE/JNL(比較帶符號數)       7D                           S異或O=0   >=                大於或等於/不小於     
  JL/JNGE(比較帶符號數)       7C                           S異或O=1   <                  小於/不大於或等於     
  JLE/JNG(比較帶符號數)       7E                           (S異或O)或Z=1   <=      小於或等於/不大於     
  無條件轉移指令JMP   
  指令格式                                       執行操作                               機器碼           說明     
  段內直接短轉移Jmp   short         (IP)←(IP)+8位位移量       EB                   轉移範圍-128到+127字節     
  段內直接近轉移Jmp   near           (IP)←(IP)+16位位移量     E9                   轉移到段內的任一位置     
  段內間接轉移Jmp   word               (IP)←(有效地址EA)           FF   
  段間直接(遠)轉移Jmp   far         (IP)←(偏移地址)   
                                                    (CS)←(段地址)                   EA     
  段間間接轉移   Jmp                       dword   (IP)←(EA)   
                                                    (CS)←(EA+2)   
                                                      二、斷點設置表   
  一般處理:   
  bpx   hmemcpy(萬能斷點)                                 
  bpx   MessageBox                                                 bpx   MessageBoxExA   
  bpx   MessageBeep                                               bpx   SendMessage   
  bpx   GetDlgItemText                                         bpx   GetDlgItemInt   
  bpx   GetWindowText                                           bpx   GetWindowWord   
  bpx   GetWindowInt                                             bpx   DialogBoxParamA   
  bpx   CreateWindow                                             bpx   CreateWindowEx   
  bpx   ShowWindow                                                 bpx   UpdateWindow   
  bmsg   xxxx   wm_move                                           bmsg   xxxx   wm_gettext   
  bmsg   xxxx   wm_command                                     bmsg   xxxx   wm_activate     
  bmsg   xxxx   wm_create                                       bmsg   xxxx   wm_destroy     
  時間相關:   
  bpint   21   if   ah==2A   (DOS)   
  bpx   GetLocalTime               
  bpx   GetFileTime   
  bpx   GetSystemtime     
  CD-ROM   或   磁盤相關:   
  bpint   13   if   ah==2   (DOS)                               bpint   13   if   ah==3   (DOS)   
  bpint   13   if   ah==4   (DOS)   
  bpx   GetFileAttributesA                                 bpx   GetFileSize   
  bpx   GetDriveType                                             bpx   GetLastError   
  bpx   ReadFile   
  bpio   -h   (Your   CD-ROM   Port   Address)   R   
  軟件狗相關:   
  bpio   -h   278   R                                                   bpio   -h   378   R     
  文件訪問相關:   
  bpint   21   if   ah==3dh   (DOS)                           bpint   31   if   ah==3fh   (DOS)   
  bpint   21   if   ah==3dh   (DOS)   
  bpx   ReadFile                                                     bpx   WriteFile   
  bpx   CreateFile                                                 bpx   SetFilePointer   
  bpx   GetSystemDirectory   
  INI   初始化文件相關:   
  bpx   GetPrivateProfileString                       bpx   GetPrivateProfileInt   
  bpx   WritePrivateProfileString                   bpx   WritePrivateProfileInt   
  註冊表相關:   
  bpx   RegCreateKey                                             bpx   RegDeleteKey   
  bpx   RegCloseKey                                               bpx   RegOpenKey   
  bpx   RegQueryvalue   
  註冊標誌相關:   bpx   cs:eip   if   EAX==0   
  內存標準相關:   bpmb   cs:eip   rw   if   0x30:0x45AA==0   
  顯示相關:   bpx   0x30:0x45AA   do   "d   0x30:0x44BB"   
                  bpx   CS:0x66CC   do   "?   EAX"     
  利用S命令設斷:   
  S   [-cu][address   L   length   data-list]   
  address :搜索的起始地址   
  length   :搜索的長度(字節長)   
  data-list :可以是一系列字節,也可以是字符串,   字符串可以用單引號或雙引號括住   
  例如:S   30:0   L   ffffffff   '********'     
                                                        三、經典句式   
  1         mov     eax   [             ]     這裏可以是地址,也可以是其它寄存器   
        mov     edx   [             ]     同上     通常這兩個地址就儲存着重要信息   
        call   00??????   
        test   eax   eax   
        jz(jnz)   
  2         mov     eax   [             ]     這裏可以是地址,也可以是其它寄存器   
        mov     edx   [             ]     同上     通常這兩個地址就儲存着重要信息   
        call   00??????   
        jne(je)   
  3         mov   eax   [       ]   
        mov   edx   [       ]   
        cmp   eax,edx   
        jnz(jz)   
  或者   
  begin:   mov   al   [       ]   
            mov   cl   [       ]   
            cmp   al,cl   
            jnz(jz)   
            mov   al   [     +1]   
            mov   cl   [     +1]   
            cmp   al,cl   
            jnz(jz)   
            cmp   eax   ecx   (eax爲計數器)   
            jnl   begin   
            mov   al   01   
  4         lea   edi   [         ]   
        lea   esi   [         ]   
        repz   cmpsd   
        jz(jnz)   
  5         mov     eax   [             ]     這裏可以是地址,也可以是其它寄存器   
        mov     edx   [             ]     同上     通常這兩個地址就儲存着重要信息   
        call   00??????   
        setz   (setnz)   al   (bl,cl…)   
  6         mov     eax   [             ]     這裏可以是地址,也可以是其它寄存器   
        mov     edx   [             ]     同上     通常這兩個地址就儲存着重要信息   
        call   00??????   
        test   eax   eax   
        setz   (setnz)   bl,cl…   
  7         call   00??????     ***   
        push   eax   (ebx,ecx…)   
        ……   
        call   00??????   
        pop   eax   (ebx,ecx…)   
        test   eax   eax     
        jz(jnz)  


intel   x86   類NOP   指令列表(修訂版)   
  bkbll([email protected])   
  2003/09/10   
  這篇文章是無聊的時候寫的,   因爲看到phrack   61上面的fake-nop的東東,   覺得有意思.   
  後來又受到eyas([email protected])的啓發,從intel指令手冊上找了找,下面是我試驗通過可以替換NOP的指令.   
  注1:   這裏不考慮雙字節或以上的指令的fake-nop編碼.   
  注2:   eyas加了xchg指令.   
  16進制機器碼   x86彙編指令   指令意義   可能影響的寄存器或標誌位   
  --------------   -------------   -------------------   ---------------------------   
  06   PUSHL   %es   es進棧   esp   
  0E   PUSHL   %cs   cs進棧   esp   
  16   PUSHL   %ss   ss進棧   esp   
  1E   PUSHL   %ds   ds進棧   esp   
  27   DAA   加法小數位調整   AF   CF   PF   SF   ZF   AL   
  2F   DAS   減法小數位調整   AF   CF   PF   SF   ZF   AL   
  37   AAA   加法的ASCII調整   AF   CF   AL   
  3F   AAS   減法小數位調整   AF   CF   AL   
  40   INC   %eax   %eax加1   AF   OF   PF   SF   ZF   eax   
  41   INC   %ecx   %ecx加1   AF   OF   PF   SF   ZF   ecx   
  42   INC   %edx   %edx加1   AF   OF   PF   SF   ZF   edx     
  43   INC   %ebx   %ebx加1   AF   OF   PF   SF   ZF   ebx   
  44   INC   %esp   %esp加1   AF   OF   PF   SF   ZF   esp   
  45   INC   %ebp   %ebp加1   AF   OF   PF   SF   ZF   ebp   
  46   INC   %esi   %esi加1   AF   OF   PF   SF   ZF   esi   
  47   INC   %edi   %edi加1   AF   OF   PF   SF   ZF   edi   
  48   DEC   %eax   %eax減1   AF   OF   PF   SF   ZF   eax   
  49   DEC   %ecx   %ecx減1   AF   OF   PF   SF   ZF   ecx   
  4A   DEC   %edx   %edx減1   AF   OF   PF   SF   ZF   edx   
  4B   DEC   %ebx   %ebx減1   AF   OF   PF   SF   ZF   ebx   
  4C   DEC   %esp   %esp減1   AF   OF   PF   SF   ZF   esp   
  4D   DEC   %ebp   %ebp減1   AF   OF   PF   SF   ZF   ebp   
  4E   DEC   %esi   %esi減1   AF   OF   PF   SF   ZF   esi   
  4F   DEC   %edi   %edi減1   AF   OF   PF   SF   ZF   edi   
  50   PUSHL   %eax   eax進棧   esp   
  51   PUSHL   %ecx   ecx進棧   esp   
  52   PUSHL   %edx   edx進棧   esp   
  53   PUSHL   %ebx   ebx進棧   esp   
  54   PUSHL   %esp   esp進棧   esp   
  55   PUSHL   %ebp   ebp進棧   esp   
  56   PUSHL   %esi   esi進棧   esp   
  57   PUSHL   %edi   edi進棧   esp   
  90   NOP   (NULL)   (NULL)   
  91   XCHG   %ecx,%eax   交換寄存器內容   eax,ecx   
  92   XCHG   %edx,%eax   交換寄存器內容   edx,eax   
  93   XCHG   %ebx,%eax   交換寄存器內容   ebx,eax   
  95   XCHG   %ebp,%eax   交換寄存器內容   ebp,eax   
  96   XCHG   %esi,%eax   交換寄存器內容   esi,eax   
  97   XCHG   %edi,%eax   交換寄存器內容   edi,eax   
  98   CBW   將byte的AL轉換成word的EAX   EAX   
  9B   WAIT   等待CPU處理完數據   (NULL)   
  D6   無效指令   (NULL)   (NULL)   
  F5   CMC   轉換CF標誌位(開關)   CF   
  F8   CLC   清CF位(CF=0)   CF   
  F9   STC   設置CF位(CF=1)   CF   
  FC   CLD   設置DF位(DF=1)   DF   
  FD   STD   清理DF位(DF=0)   DF   
  1.   上面利用XCHG/PUSHL/INC/DEC的方法程序應該不會出錯,   可以正常到目的,   但寄存器內容被改變了.inc   eax就改變了eax的值,   
  只能算無奈的辦法.   
  2.   利用改變標誌寄存器位是個不錯的想法,   基本上不會影響流程,   但看到還是改變了CPU的東西還是不滿意.   
  3.   \x90(NOP),\x9b(wait),\xd6(bad)   這三個指令不錯,   都不會改變程序的流程,   又不會改變寄存器的東東.   
  這裏尤其指明的是\xd6指令,   在intel手冊上沒查到對應什麼指令,   但在linux下和windows下發現系統對於這個是繼續   
  執行下一條指令,和NOP相似.   
  在我看來,上面這些指令利用順序優先級最好是:   
  \x90(NOP)   >   \xd6   >   \x9b   >   改變標誌寄存器的操作指令   >   INC/DEC/PUSHL/XCHG   
  //thx   to   eyas  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章