主页 > 人工智能  > 

Windows逆向工程入门之调用约定

Windows逆向工程入门之调用约定
公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页

目录

调用约定

调用约定

约定规则

cdecl

stdcall

fastcall

thiscall


调用约定 调用约定

调用约定(Calling Convention):确定了函数调用时参数传递、返回值处理以及寄存器使用的规则。

堆栈(Stack):用于存储函数的参数、返回地址和局部变量。

约定规则 cdecl

参数从右到左压入堆栈。

调用者负责清理堆栈。

#include <iostream> void _cdecl Fun1(int a, int b, int c, int d) { } int main() { // PUSH 4 // PUSH 3 // PUSH 2 // PUSH 1 // CALL FUN1 // ADD ESP, 0X10 Fun1(1, 2, 3, 4); return 0; } stdcall

参数从右到左压入堆栈。

被调用者负责清理堆栈。

#include <iostream> void _stdcall Fun1(int a, int b, int c, int d) { // ADD ESP, 0X10 // RET 0X10 } int main() { // PUSH 4 // PUSH 3 // PUSH 2 // PUSH 1 // CALL FUN1 Fun1(1, 2, 3, 4); return 0; } fastcall

前两个参数通过ECX和EDX寄存器传递,剩余参数从右到左入栈。

被调用者负责清理堆栈。

#include <iostream> void _fastcall Fun1(int a, int b, int c, int d) { //mov dword ptr[ebp - 14h], edx //mov dword ptr[ebp - 8], ecx //mov dword ptr[ebp - 8], 10h //mov dword ptr[ebp - 14h], 11h //mov dword ptr[ebp + 8], 12h //mov dword ptr[ebp + 0Ch], 13h a = 16; b = 17; c = 18; d = 19; // RET 0X10 } int main() { // PUSH 4 // PUSH 3 // MOV edx,2 // MOV ecx,1 // CALL FUN1 Fun1(1, 2, 3, 4); return 0; } thiscall

常用于C++成员函数。

this指针通过ECX寄存器传递。

其余参数从右到左入栈。

标签:

Windows逆向工程入门之调用约定由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Windows逆向工程入门之调用约定