typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);
Как я уже сказал, я пытаюсь научиться реинжинирингу программ с использованием C ++ / Assembly, поэтому я изучаю некоторые проекты с открытым исходным кодом, которые я нашел в Интернете. Но кто-нибудь может объяснить, что делает эта строка? Я не продвинутый в 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 — это способ, которым функция вызывается компилятором (передаются ли параметры слева направо или наоборот? Возвращаемое значение передается через стековую память или регистр ЦП?)
С уважением
Других решений пока нет …