170518 逆向-寄存器传递参数、函数返回值
来源:互联网 发布:淘宝买家用户数据出售 编辑:程序博客网 时间:2024/06/05 22:32
1625-5 王子昂 总结《2017年5月17日》 【连续第228天总结】
A.加密与解密 函数的参数-寄存器传递,返回值
B.寄存器传递参数的方式并没有一个标准。
绝大多数编译器提供商都在不对兼容性声明的情况下,遵循__fastcall规范
然而不同编译器实现的该规范又有些不同。
比如说,VC++编译器的约定是最左边的两个不大于4字节的参数分别放在ecx和edx。其余使用堆栈。浮点值、远指针和__int64类型总是通过堆栈里传递的。
而Borland Delphi/C++编译器则将最左边的三个不大于4字节的参数分别放在eax,edx和ecx中。
另一个调用规范thiscall也用到了寄存器传递参数。thiscall是C++中的菲静态类成员函数的默认调用约定。对象的每个函数隐含接收this参数。采用该约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,只是另外通过ecx寄存器传送一个额外的参数:this指针
名称修饰约定:
在C++中,为了允许操作符重载和函数重载,编译器往往按照某种规则改写每一个入口点的符号名,一边允许同一个函数名字有多个用法。这项技术被称为名称改编或名称修饰。
不同的C++编译器有不同的方案。
C:
__stdcall约定在函数名前加上_,后面加上@和其参数的字符数
__cdecl约定仅在函数名前加_
__fastcall约定在函数名前加@,后面也加@和参数的字符数。
函数被调用完后向调用者返回一个或多个执行结果,称为函数返回值。最常见的方式是使用return,也可以通过指针和全局变量来传递。
return:
一般情况下,返回值放在eax中。如果处理结果超过了eax容量,就把高32位放在edx中
将参数使用引用方式传递:
参数有两种传递方式,值传递和引用传递。
引用传递时,函数内修改的变量可以传递给调用者
实质上引用传递是将该变量的地址(指针)送入函数,因此在汇编代码中,参数也就是该内存的地址
C.明日计划
加密与解密 数据结构
- 170518 逆向-寄存器传递参数、函数返回值
- C++函数参数传递和返回值
- C++函数参数传递和返回值
- 拷贝构造函数 参数传递 返回值
- 函数参数和返回值的传递
- 函数返回值与参数传递
- 函数参数的传递和值返回
- C函数参数传递与返回值传递
- 数组做函数参数传递和函数返回值
- C++函数的参数传递、返回值及函数声明
- 函数的参数和返回值的传递方式
- C++ - 函数的参数传递方式和返回值
- x64 调用约定,参数传递以及函数返回值
- X86和ARM:函数调用参数传递和返回值
- C++函数之 参数和返回值的传递方式
- C/C++ 函数参数和返回值传递机制
- C/C++ 函数参数和返回值传递机制
- C++函数参数传递与返回值优化技巧
- QT信号与槽的简单实例
- idea玩转“码云”(一、idea安装码云插件)
- c++第六次实验
- Java人民币从数字形式转换成汉字(繁体)!
- 进程间通信---->信号量
- 170518 逆向-寄存器传递参数、函数返回值
- lintcode——二叉查找树总结
- c#连接sqlServer
- C语言的数据类型
- java里类方法和实例方法区别及调用类的方法
- Effective C++ 第五 六条C++默认编写调用哪些函数,如何明确拒绝自动生成的函数
- MATLAB面向对象编程import导入信息冲突问题
- Python使用pip安装其他包
- 逻辑问题