最近在师傅的领导下着手学习逆向课程,接触了许多汇编语句,开个帖记录一下。

pushad:将8个寄存器的值存入内存


popad:将原寄存器中的值从内存中取出后复原



adc:带进位加法(加上C寄存器)   sbb:带进位减法(加上C寄存器)   xchg:交换寄存器的值   movs:移动数据 内存-内存   byte:movsb - movs byte ptr ds:[edi],byte ptr ds:[esi] word:movsw - movs word ptr ds:[edi],word ptr ds:[esi] dword:movsw - movs dword ptr ds:[edi],dword ptr ds:[esi]   STOS:将Al/AX/EAX的值存储到[EDI]指定的内存单元   stosb:stos byte ptr es:[edi] stosw:stos word ptr es:[edi] stosd:stos dword ptr es:[edi]   rep:按计数寄存器(ECX)中指定的次数重复执行字符串指令   jmp:修改eip的值,其他寄存器都不变   call:修改eip,栈顶esp-4   retn:相当于pop eip指令,出栈,回到esp+4处,栈顶+4   cmp:比较两个数,若相等,z寄存器为1     若第一个数小于第二个数,s寄存器为1,否则为0   test:确定寄存器是否为0,相当于与运算,观察z位是否为0   xor eax,eax:将eax寄存器的值清零  

rep stos 实例:

  mov ecx,0x13    //0x13存入ecx

mov eax,0xCCCCCCCC    //0xCCCCCCCC存入eax

rep stos dword ptr es:[edi]    //重复执行ecx的值为次数(rep),将eax的值存入edi(stos)

此实例主要用于填充缓冲区,作用一是清除缓冲区之前的垃圾数据,作用二是为了防止缓冲区溢出(eax存入的0xCCCCCCCC为int3)



imul指令:有符号乘,影响 OF、CF 标志位


    如果参数是 r8/m8,   将把  AL 做乘数, 结果放在 AX


    如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX


    如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX