typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);
正如我所说,我试图学习如何使用C++/Assembly对程序进行逆向工程,所以我正在浏览我在互联网上找到的一些开源项目。但是谁能解释一下这条线的作用?我在C++方面没有进步,这就是我通过来源的原因。
你的代码是C语言。所以它在C++中也能很好地编译。
让我们一步一步来。
- 下面是函数声明或原型或签名。
它返回一个 int,接受 4 个参数:
int __stdcall MessageBoxA(HWND, LPCSTR, LPCSTR, UINT);
- 这里ptr是一个函数的指针变量:
int(__stdcall *ptr)(HWND, LPCSTR, LPCSTR, UINT);
ptr = NULL;
/ assign a correct adress
ptr = MessageBoxA;
// call the function with parameters using the pointer
(*ptr)(hWnd, NULL, NULL, 0);
- 这里__MessageBoxA是一种类型,它有助于定义一个变量,该变量是指向函数的指针:
typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);
因此,可以声明指向函数变量的指针。
__MessageBoxA ptr1 = NULL;
编译器调用函数的方式__stdcall(参数是从左到右还是反向传递?返回值是通过堆栈内存还是 CPU 寄存器传递的?- 细节 大多数人不在乎只要来电者和被叫者同意
问候