概述
- 开发时调试
- 逆向时的代码阅读
- 某些特殊技术的使用(shellcode,壳)
- 存储数据
- 保存寄存器环境
- 传递参数
-
lea eax,dword ptr ss:[esp-4] 将 ss:[esp-4] 传入eax(传址)
-
xchg eax,dword ptr ss:[esp-4] 将两操作数互相交换
比较指令
-
cmp oprd1,oprd2 将两数相减进行比较
-
test oprd1,oprd2 仅影响标志位,进行and运行
选择常用的jcc指令
-
jmp 无条件
-
JZ/JE ZF=1/等于0/相等跳转
-
JNZ/JNE ZF=0 /不等于0/不相等
-
JBE/JNA: CF=1/ZF=1 低于等于/不高于跳转
-
JNBE/JA : CF=0/ZF=0 不低于等于/高于跳转
-
JL/JNGE : SF ! =OF 小于/不大于等于跳转
-
JNL/JGE : SF=OF 不小于/大于等于跳转
串操作指令
.586
.MODEL flat,stdcall
.code
addf proc
add eax,ebx
ret
addf endp
main proc
mov eax,6
mov ebx,5
call addf
mov eax,eax
main ENDP
END main
.586
.MODEL flat,stdcall
.code
addf proc
mov eax,[esp 4]
mov ebx,[esp 8]
add eax,ebx
ret
addf endp
main proc
push 5
push 6
call addf
mov eax,eax
main ENDP
END main
API
-
ExitProcess PROTO, dwExitCode : DWORD
-
MessageBoxA PROTO hWnd : DWORD, IpText : BYTE, IpCaption: BYTE, uType:DWORD
.586
.MODEL flat,stdcall
includelib user32.lib
includelib kernel32.lib
ExitProcess PROTO, dwExitCode : DWORD
MessageBoxA PROTO hWnd : DWORD, IpText : BYTE, IpCaption: BYTE, uType:DWORD
.data
string db "helloworld",0
.code
main proc
push 0
lea eax,string
push eax
push eax
push 0
call MessageBoxA
add esp,16
call ExitProcess
main ENDP
END main
来源:https://www./content-1-686701.html
|