【问题标题】:Learning reversing via C++, but what does this line do?通过 C++ 学习逆向,但是这条线是做什么用的?
【发布时间】:2016-01-27 11:25:27
【问题描述】:
typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT); 

正如我所说,我正在尝试学习如何使用 C++/Assembly 对程序进行逆向工程,因此我正在浏览我在互联网上找到的一些开源项目。但是谁能解释这条线的作用?我在 C++ 方面并不先进,这就是为什么我要查看源代码。

【问题讨论】:

  • 任何上下文?项目源代码的链接?
  • 这声明了一个名为__MessageBoxA的类型,它是一个指向返回int的函数和调用约定为__stdcall的参数HWND, LPCSTR, LPCSTR, UINT的指针

标签: c++ typedef hwnd stdcall lpcstr


【解决方案1】:

您的代码是 C 语言。所以它在 C++ 中也可以很好地编译。

让我们一步一步来。

  1. 这是一个函数声明或原型或签名
    它返回一个 int,接受 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 是编译器调用函数的方式(参数是从左到右传递还是反向传递?返回值是通过堆栈内存还是CPU寄存器传递?) - 细节大多数人并不关心只要调用者和叫同意

问候

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 2012-03-23
    • 1970-01-01
    • 2015-10-18
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多