typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);
正如我所说,我正在尝试学习如何使用 C++/Assembly 对程序进行逆向工程,所以我正在浏览我在互联网上找到的一些开源项目。但是谁能解释这条线的作用?我在 C++ 方面并不先进,这就是为什么我要通过资源。
你的代码是C语言。所以它在 C++ 中也可以很好地编译。
让我们一步一步来。
int __stdcall MessageBoxA(HWND, LPCSTR, LPCSTR, UINT);
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);
typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);
因此可以声明指向函数变量的指针。
__MessageBoxA ptr1 = NULL;
__stdcall 是编译器调用函数的方式(参数是从左到右传递还是反向传递?返回值是通过堆栈内存还是CPU寄存器传递?) - 细节大多数人并不关心只要调用者和被调用者同意
问候