函数
jmp
用jmp实现函数,需要再用jmp调回来,且不可重复
call
用call实现函数,并且在使用后能跳回来继续下一行指令
如实现两个整数的加法
0x00186784 mov ecx,1
0x00186788 mov edx,1
0x0018678C call 0x0018679C 记录函数的头地址
……
0x0018679C add ecx,edx 以下三行为函数
0x001867A0 mov eax,ecx
0x001867A4 ret 此行返回到call的下一行
如果参数过多,利用堆栈
将过多的参数压入栈中,使用函数时在取出来用
如将计算1+2+3+4+5
push 1
push 2
push 3
push 4
push 5
call m
……
mov eax,dword ptr ds:[esp+4]
mov eax,dword ptr ds:[esp+8]
mov eax,dword ptr ds:[esp+12]
mov eax,dword ptr ds:[esp+16]
mov eax,dword ptr ds:[esp+20]
ret
堆栈平衡
进入函数后,在ret之前必须使esp的值为到call语句下一条指令的地址
(在函数中可能存在更改eip的语句,如push pop等等,需要在ret之前把它变回来)
posted on 2020-02-20 20:27 没有感情的rainbow 阅读(130) 评论(0) 收藏 举报
浙公网安备 33010602011771号