Наткнулся на довольно странную реализацию, как такое может быть? Есть конструктор PHP: CUserSocket* __cdecl CUserSocket::UserSocketConstructor(CUserSocket* pUserSocket, SOCKET _s) { typedef CUserSocket* (__cdecl *t)(CUserSocket*, SOCKET); t f = (t)0x0093CADC; CUserSocket* pReturn = f(pUserSocket, _s); return pReturn; } Очень хорошо видно что соглашение о вызове указано __cdecl. Но если посмотреть на дизассемблированный код, видно что это __fastcall. Code: .text:000000000093CED6 mov rdx, rbx .text:000000000093CED9 mov rcx, rax .text:000000000093CEDC call sub_93CADC Вопрос почему это не приводит к ошибке, компилированная DLL, хорошо работает. Подмена происходит вот так: WriteInstruction(0x93CEDC, (UINT32)CUserSocket::UserSocketConstructor, 0xE8);