Кто из разработчиков pts серверов может объ&#1

Discussion in 'Off Topic / Флудилка' started by ToDeeJlQustR, Jul 26, 2016.

  1. ToDeeJlQustR

    ToDeeJlQustR New Member

    Наткнулся на довольно странную реализацию, как такое может быть?
    Есть конструктор

    PHP:
    CUserSocket__cdecl CUserSocket::UserSocketConstructor(CUserSocketpUserSocketSOCKET _s)
    {
        
    typedef CUserSocket* (__cdecl *t)(CUserSocket*, SOCKET);
        
    t f = (t)0x0093CADC;
        
    CUserSocketpReturn 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);