GTA Builder Форум
GTA San Andreas => Программирование => Тема начата: mike43842 от Февраль 23, 2014, 06:55:39 pm
-
Всем привет, я написал маленький плагин отменяющий вызов читов в gta sa, но вот я хотел узнать насчет такой штуки:
Я глянул вот этот урок - http://gtabuilder.ru/zamena-peremennyx-v-gta-vice-city/ (http://gtabuilder.ru/zamena-peremennyx-v-gta-vice-city/) там функция вызывается:
case DLL_PROCESS_ATTACH:
Replace_varIconSize();
break;
Я решил написать также у себя т.е. просто вот так:
void cheat() {
*reinterpret_cast<WORD *>(0x438517) = 0x9090;
};
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
cheat();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Но вот cheat не вызывается, но если писать вот так в DLL PROCESS_ATTACH:
SetTimer(0,0, 1, (TIMERPROC)cheat); то все работает, можете объяснить в чем у меня проблема когда я пишу просто cheat(); ?
-
.text:00438516 048 D8 1D 80 7C 68 00 fcomp fNull_1
Как оно вообще не вылетело?
-
Sektor, я про gta sa пишу. А ты кинул строку из базы vc.
там вот что:
.text:00438517 02C jz short loc_438530 ; Jump if Zero (ZF=1)
т.е. через reinterpret_cast меняется команда jz на 2 nop.
-
а VirtualProtect - точно не забыл, изменить атрибуты памяти для записи?
-
Нет, этого не писал, а разве это относится к той проблема которая у меня? Функция то работает, только когда написан таймер.
-
Нет, этого не писал, а разве это относится к той проблема которая у меня? Функция то работает, только когда написан таймер.
Если функция работает, при таймере, значит доступ для чтения/записи уже изначально открыт. Но тут мне кажется, только одно когда запуск произошел, сперва ваши нопы прописались, а затем уже выделились команды из exe sa. С такой проблемой еще не сталкивался, но нужно будет по узнавать до точности.