Win32-API函数调用的约定
来源:互联网 发布:python opencv人脸识别 编辑:程序博客网 时间:2024/05/16 06:36
函数调用原理:
win32 api的函数调用方式是stdcall,其过程操作如下:
2.函数调用代码
a.将参数存入栈 (从右向左入栈)
b.跳转 call 入口地址
push eip (压入返回地址,即函数调用返回后要执行的下一条指令的地址)
mv eip 函数的地址 (将eip设置为被调用函数的地址,执行其代码区指令)
1.压入函数栈帧
push ebp(压入旧栈帧的底部)
mov ebp,esp(设置新栈帧的底部)
sub esp,xxx(设置新栈帧的顶部)
2.被调用函数的逻辑(如果有返回值的话,存入寄存器)
3.弹出函数栈帧
add esp,xxx(回收当前栈帧,栈顶指向旧栈帧底部值)
pop ebp(将旧栈帧底部值位置恢复到ebp)
4.返回 ret
将eip设置为返回地址(返回到原函数)
由调用函数和被调函数的模拟步骤可以看出:
(addr:005)call ~ (压入栈中的值是:006,把~的地址放入eip)
(addr:006)do sth
上下两指令之间,时间和步骤上是分水岭,距离上可能很远。
(addr:078)push ebp
1,将当前eip的值(也就是当前指令的地址+1,也就是call~这条指令的所在地+1)放入栈中。
2,把eip从当前值改为被调用函数的首地址。
ret 指令完成的微操作:
1,从栈中取出值,送入eip。
jmp ~ 指令完成的微操作:
1,把eip的值改为~。
win32 api的函数调用方式是stdcall,其过程操作如下:
调用函数的代码:
1.调用函数的逻辑代码2.函数调用代码
a.将参数存入栈 (从右向左入栈)
b.跳转 call 入口地址
push eip (压入返回地址,即函数调用返回后要执行的下一条指令的地址)
mv eip 函数的地址 (将eip设置为被调用函数的地址,执行其代码区指令)
3.调用函数的逻辑代码
1.压入函数栈帧
push ebp(压入旧栈帧的底部)
mov ebp,esp(设置新栈帧的底部)
sub esp,xxx(设置新栈帧的顶部)
2.被调用函数的逻辑(如果有返回值的话,存入寄存器)
3.弹出函数栈帧
add esp,xxx(回收当前栈帧,栈顶指向旧栈帧底部值)
pop ebp(将旧栈帧底部值位置恢复到ebp)
4.返回 ret
将eip设置为返回地址(返回到原函数)
由调用函数和被调函数的模拟步骤可以看出:
(addr:005)call ~ (压入栈中的值是:006,把~的地址放入eip)
(addr:006)do sth
上下两指令之间,时间和步骤上是分水岭,距离上可能很远。
(addr:078)push ebp
回忆组成原理知识,一条机器指令的执行过程:取指,译码,执行,写回。每一条机器指令的运行,都会涉及到EIP的变化(这是机器级别的,其操作对汇编级别也不可见)。
call ~ 指令完成的微操作:1,将当前eip的值(也就是当前指令的地址+1,也就是call~这条指令的所在地+1)放入栈中。
2,把eip从当前值改为被调用函数的首地址。
ret 指令完成的微操作:
1,从栈中取出值,送入eip。
jmp ~ 指令完成的微操作:
1,把eip的值改为~。
- Win32-API函数调用的约定
- win32下的函数调用约定
- Win32汇编中的函数调用约定
- 函数的调用约定
- 函数的调用约定
- 函数的调用约定
- 函数的调用约定
- c# 中调用win32的api函数
- Win32调用约定详解
- c#调用Win32 Api函数
- 关于函数的调用约定
- 函数调用的一些约定
- 函数调用约定的区别
- C#调用Win32的API函数的过程
- C#调用Win32 的API函数--User32.dll
- C#调用Win32 的API函数User32.dll (转)
- C#调用Win32 的API函数--User32.dll
- C#调用Win32 的API函数--User32.dll
- android实现关键字搜索功能
- Android设计模式系列--观察者模式
- Cocos2d-x中使用Lua脚本
- http服务器 Nginx配置文件详细说明
- dev gridcontrol控件表头菜单屏;
- Win32-API函数调用的约定
- GreenDroid总结
- 常用正则表达式
- 非常适合android初学者的一个网址
- 解决织梦 \include\userlogin.class.php on line 21 报错的方法
- (八)机房收费系统测试分析报告
- 验证身份证的合法性JS代码
- ssssssssss
- goldengate针对目的端数据库启停的操作