通过 C++ 学习逆向,但这行是做什么的?

Learning reversing via C++, but what does this line do?

typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT); 

正如我所说,我正在尝试学习如何使用 C++/汇编程序对程序进行逆向工程,因此我正在研究我在 Internet 上找到的一些开源项目。但是谁能解释一下这条线的作用?我在 C++ 方面并不先进,这就是我浏览源代码的原因。

你的代码是C语言。所以它在 C++ 中也可以正常编译。

让我们一步一步来。

  1. 这是一个函数声明或原型或签名
    它 return 是一个整数,接受 4 个参数:
int __stdcall MessageBoxA(HWND, LPCSTR, LPCSTR, UINT); 
  1. 这里 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); 
  1. 这里__MessageBoxA是一个类型,有助于定义一个指向函数的变量:
typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT); 

因此可以声明指向函数变量的指针。

__MessageBoxA ptr1 = NULL;

__stdcall是编译器调用函数的方式(参数是从左向右传递还是反向传递?return值是通过栈内存还是CPU寄存器传递? ) - 大多数人不关心的细节,只要来电者和被叫者同意

此致