《逆向工程核心原理》学习总结(三)
来源:互联网 发布:淘宝头像图片 编辑:程序博客网 时间:2024/06/06 01:17
函数调用约定,决定在函数调用过程中参数的传递方式、栈平衡由调用者还是被调用者执行、返回值如何传递。
三种比较基本的函数调用约定:
- cdelc (C调用约定)
- stdcall (标准调用约定)
- fastcall (快速调用约定)
cdelc
参数通过堆栈传递,参数从右至左依次入栈;
由调用者负责执行栈平衡;
返回值一般存放于eax中;
备注:cdelc是C语言默认的函数调用约定;函数名前面加下划线_;
stdcall
参数通过堆栈传递,参数从右至左依次入栈;
由被调用者负责执行栈平衡(ret n指令),意味着更好的兼容性;
返回值一般存放于eax中;
备注:C函数前加关键字stdcall使函数调用约定变更;WINAPI 是 _stdcall的别称,意味着所有的Windows API函数都是stdcall调用约定;函数名前加下划线,函数名后加@。
fastcall
通过寄存器传参,速度更快。
前两个(最左边两个)参数通过ecx、edx传参,其他通过堆栈传参;
由被调用者负责执行栈平衡;
返回值一般存放于eax中;
另外一种常见的函数调用约定 - thiscall
thiscall 是关于类的一种调用方式,不能被指定。
类函数调用相比于其他函数多了一个默认的this指针。
栈平衡维护与参数传递取决于参数的个数可变与否:
1) 参数从右向左入栈;
2) 如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,this指针在所有参数压栈后被压入堆栈;
3) 对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈。
阅读全文
1 0
- 《逆向工程核心原理》学习总结(三)
- 逆向工程核心原理学习笔记(七):总结
- 逆向工程核心原理学习笔记(七):总结
- 《逆向工程核心原理》学习总结(一)
- 《逆向工程核心原理》学习总结(二)
- 《逆向工程核心原理》学习总结(四)
- 逆向工程核心原理学习笔记(三):检索API方法
- 逆向工程核心原理学习笔记(三):检索API方法
- 逆向工程核心原理学习笔记(十一):栈
- 逆向工程核心原理学习笔记(十四):栈帧1
- 逆向工程核心原理学习笔记(十一):栈
- 逆向工程核心原理学习笔记(十四):栈帧1
- 《逆向工程核心原理》
- 《逆向工程核心原理》
- 逆向工程核心原理
- <逆向工程核心原理> 静态反调试技术总结
- <逆向工程核心原理> 动态反调试技术总结
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- 卡尔曼滤波学习笔记
- 在GitLab上如何删除工程
- 【网络】TCP协议中的四大定时器
- Boost function使用方法
- git系列:gitignore
- 《逆向工程核心原理》学习总结(三)
- iOS开发笔记之基于键值的观察者模式(KVO)
- CSS引入的方式及link和@import的区别
- LINUX下修改mysql数据库密码
- IBatis-学习-3
- 自定义TabBarController,支持双击回到顶部
- ubuntu 默认vim 没有+寄存器
- mysql字符问题
- Android重新启动app