Показать сообщение отдельно
Старый 11.01.2016, 00:34   #1
Новичок
 
Регистрация: 11.01.2016
Сообщений: 1
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
bolvai пока неопределено
По умолчанию Как использовать Fastcall ? ХЭЛП!

Хочу восстановить функцию из Engine.dll и немного ее изменить
Код:
int __thiscall sub_200D7CE0(int this, int a2)
{
  int v3; // [sp+8h] [bp-10h]@1
  int v4; // [sp+14h] [bp-4h]@1

  sub_200D6990(this, a2);
  v4 = 0;
  *(_DWORD *)a2 = &off_2054182C;
  *(_DWORD *)(a2 + 16) = 128;
  *(_DWORD *)(a2 + 20) = 0;
  FName__FName(&v3, L"Package.a", 1);
  *(_DWORD *)(a2 + 48) = v3;
  *(_DWORD *)(a2 + 64) = 2;
  *(_DWORD *)(a2 + 56) = 1;
  *(_DWORD *)(a2 + 72) = 1;
  return a2;
}
Особых проблем в доступе к переменным этой функции нету, описываю я этот класс таким образом
Код:
bool SetHooks(void)
{
int AbnormalSleep;
AbnormalSleep = 0x200D7D10;
Hook::HookFunctionWithTrampoline(reinterpret_cast<unsigned char*>(AbnormalSleep), reinterpret_cast<unsigned char*>(AbnormalSleep_hookNew), trampoline);

}
typedef struct
{

    void(__fastcall *subUnk1) (void* ecx, void* dummy,int unkA2); sub_200D6990 
}   hookedAbnSleep_class;
int __stdcall AbnormalSleep_hookNew(int unkA2) //sub_200D7CE0
{
    int r = 0;

    hookedAbnSleep_class *T;
        __asm{mov T, ecx}
    T->subUnk1(0, 0, unkA2);//sub_200D6990
    return unkA2;
}
Но вся загвоздка у меня в том что я не могу понять как следует вызвать и описать эту функцию sub_200D6990 внутри моей AbnormalSleep_hookNew (так чтобы можно было поместить в нее аргументы и она работала как оригинальная) ?
Это можно проделать через Module Handle,GetProcAddress, или может еще как то.
Плиз знающие люди объясните =)) замучался....
bolvai вне форума   Ответить с цитированием