Win32汇编基础

来源:互联网 发布:阿里云手机root 编辑:程序博客网 时间:2024/05/22 08:27

常用指令
mov 目标操作数,源操作数
mov eax,0x0
进行数据传递

movzx
mov zero x 以0填充高位,用法同上,

push

pop

pushad
所有寄存器压栈(8个)
popad
所有寄存器出栈(8个)

lea
取地址指令,类似C语言中的&

call
调用函数指令

add + 加
sub - 减指令
mul * 乘法
div / 除法
inc a++
dec a–

and & 与
xor ^ 异或
or | 或
not ~ 非

shl << 逻辑左移
shr >> 逻辑右移

cmp eax,ebx
比较eax与ebx,
常与je,jne,jz,jnz,jge,jle 连用
je
如果cmp相等,就跳转

jne
如果cmp不等,则跳转

_stdcall

_cdecl

函数调用,需要将参数依次入栈,
以上两种函数 调用是从右向左压栈
函数执行完毕返回后,需要清除压入栈的参数,
stdcall是由被调用的函数清除参数占用的空间
即执行retn n 返回,并清除n个字节的空间
但此方式需要知道函数的参数数目,为了解决不定参数的函数的调用问题(如printf)
产生了cdcel调用,cdecl是由主调函数来清除被调函数的参数,即 add esp n
因为主调函数是清楚有几个参数的,

在windows程序中使用控制台
if(0!=AttachConsole(-1))//附加到一个控制台
{
freopen(“conin,r+t,stdin);//freopen(conout”,”w+t”,stdout);
freopen(“conerr$”,”w+t”,stderr);
}