ошибка при компиляции - преобразование из DWORD в LPCVOID - PullRequest
0 голосов
/ 09 сентября 2018

Я нашел этот код для внедрения DLL-файлов и вызова функций из них. Я получил exe и исходный код. Exe работает, но когда я пытаюсь скомпилировать исходный код, я получаю эту ошибку:

LoadDll.cpp: In Funktion »bool ExecuteRemoteThread(HANDLE, BOOL, BOOL, wchar_t*, wchar_t*)«:
LoadDll.cpp:313:62: Fehler: ungültige Umwandlung von »DWORD (__attribute__((__stdcall__)) *)(RemoteThreadBlock*) {aka long unsigned int (__attribute__((__stdcall__)) *)(RemoteThreadBlock*)}« in »LPCVOID {aka const void*}« [-fpermissive]
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.7.2/../../../../include/windows.h:50:0,
                 from LoadDll.cpp:16:
c:\mingw\bin\../lib/gcc/mingw32/4.7.2/../../../../include/winbase.h:2215:24: Fehler:   Argument 3 von »BOOL WriteProcessMemory(HANDLE, LPVOID, LPCVOID, SIZE_T, SIZE_T*)« wird initialisiert [-fpermissive]

Исходный код можно найти по адресу: https://pastebin.com/AuZpy57U

Кажется, что ошибка в строке 313

if ( ! WriteProcessMemory( hProcess, p, &RemoteThread, 0, 0 ) )

Надеюсь, вы поможете мне составить это.

1 Ответ

0 голосов
/ 09 сентября 2018
if ( ! WriteProcessMemory( hProcess, p, &RemoteThread, 0, 0 ) )

Вы должны привести третий параметр:

if ( !WriteProcessMemory( hProcess, p, reinterpret_cast<LPCVOID>(&RemoteThread), 0, 0 ) )

Обновление:

Чтобы избавиться от undefined reference to 'WinMain@16', вы должны использовать

int main()
{
    int argc;
    wchar_t **argv = CommandLineToArgvW(GetCommandLineW(), &argc);

    // ...

вместо

int wmain(int argc, wchar_t *argv[])
{
    // ...
...