Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 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 вне форума   Ответить с цитированием
Старый 12.01.2016, 19:08   #2
Новичок
 
Аватар для Barsik
 
Регистрация: 18.12.2008
Сообщений: 7
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
Barsik пока неопределено
По умолчанию

Цитата:
Сообщение от bolvai Посмотреть сообщение
Это можно проделать через Module Handle,GetProcAddress, или может еще как то.
GetProcAddress получает адрес экспортированной функции, у тебя походу она не экспортирована. Может поможет:


Код:
// получаем указатель на функцию с нужным прототипом
typedef void (__thiscall *oOrigFunction)(MyClass*, LPVOID, int);
oOrigFunction pOrigFunction = (oOrigFunction)addr_origFunction; // addr_origFunction = 0x200D6990

void MyClass::myFunction(LPVOID dummy, int unkA2)
{
        // вызов функции по указателю
	pOrigFunction(this, dummy, unkA2);
}

Последний раз редактировалось Barsik, 12.01.2016 в 19:31.
Barsik вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:02.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!