汇编指令和机器码的对应表

一、汇编速查   
      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(bkbll@cnhonker.net)   
  2003/09/10   
  这篇文章是无聊的时候写的,   因为看到phrack   61上面的fake-nop的东东,   觉得有意思.   
  后来又受到eyas(cooleyas@21cn.com)的启发,从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  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将ARM汇编指令转换为机器码是将人类可读的汇编指令翻译成机器可执行的二进制码的过程。由于机器码是计算机硬件能够直接理解的指令形式,所以在执行指令时,计算机需要将汇编指令转换为机器码。下面是一种简单的方法将ARM汇编指令转换为机器码。 首先,需要根据ARM指令的格式和规范理解每个指令的含义和操作码。ARM指令由32位组成,其中包含操作码、操作数和其他参数。 其次,根据具体指令的格式,将每个部分转换为对应的二进制示形式。例如,操作码通常示为特定的二进制位模式。 然后,根据指令的不同寻找对应编码方式。不同的指令有不同的编码方式,例如立即数、寄存器和内存地址等等。根据具体的指令要求和参数,转换相应的部分。 最后,将所有部分组合成一个32位的二进制序列,这就是转换后的机器码。转换后的机器码可以被计算机硬件直接识别和执行。 需要注意的是,ARM汇编指令转换为机器码的过程需要具备一定的知识和经验。对于复杂的指令或有特殊要求的指令,可能需要查阅相关的ARM体系结构手册或其他资料来获得准确的转换方式。此外,在转换过程中还应该注意指令的字节顺序(即大端序或小端序)以及特殊的对齐要求。 总之,将ARM汇编指令转换为机器码是一项需要仔细思考和操作的任务。掌握适当的知识和技巧可以帮助我们完成这个过程,以便更好地理解和使用ARM指令集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值