簡體   English   中英

掛鈎函數時出錯,“變量x周圍的堆棧已損壞。”? C ++

[英]Error when hooking a function, “Stack around the variable x was corrupted.”? C++

我正在嘗試在x64應用程序上掛鈎函數。 這是我的代碼:

int __stdcall nRecv(SOCKET s, char* buf, int len, int flags)
{
    Log("Receving!");
    return 0;
}

BOOL HookFunction(LPCWSTR moduleName, LPCSTR funcName, LPVOID pDestination)
{
    BYTE stub[6] = { 0xe9, 0x00, 0x00, 0x00, 0x00, 0xc3 };
    DWORD pProtection;

    DWORD pSource = (DWORD)GetProcAddress(GetModuleHandle(moduleName), funcName);


    LPVOID pTrampoline = VirtualAlloc(NULL, 6 + sizeof(stub), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

    VirtualProtect((LPVOID)pSource, 6, PAGE_EXECUTE_READWRITE, &pProtection);


    CopyMemory(stub + 1, &pDestination, 4);

    CopyMemory((LPVOID)((DWORD_PTR)pTrampoline), &pSource, 6);
    CopyMemory((LPVOID)((DWORD_PTR)pTrampoline + 6), stub, sizeof(stub));


    CopyMemory(stub + 1, &pTrampoline, 4);
    CopyMemory(&pSource, &stub, sizeof(stub));


    VirtualProtect((LPVOID)pSource, 6, pProtection, NULL);

    return TRUE;
}

BOOL recvHook = HookFunction(L"ws2_32.dll", "recv", &nRecv);

我已連接調試器並發現錯誤: 變量pSource周圍的堆棧已損壞。

我真的找不到發生這種情況的確切原因,我做錯了什么嗎? 謝謝!

這行代碼將6個字節的內存復制到4個字節的變量中

CopyMemory(&pSource, &stub, sizeof(stub));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM