常用指令
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);
}