MasterGH Опубликовано 14 декабря, 2010 Поделиться Опубликовано 14 декабря, 2010 class A { int x;protected: void *y;public: A (int _x) : x (_x), y (0) { } virtual int GetX (void) const { return x; } virtual void SetX (int _x) { x = _x; } };class B1: public A {public: B1 (void) : A (1) { } int GetX (void) const { return 1; } };class B2: public A {public: B2 (void) : A (2) { } int GetX (void) const { return 2; } }; Теперь можно сделать так:A *x = new A (3);B1 *y = new B1 ();* (void **) x = * (void **) y; // сама привязкаprintf ("%d\n", x->GetX ()); // выведет 1Мне не понятен смысл описания:A (int _x) : x (_x), y (0) { }Вообще-то похожим способом объявляются вызовы базовых классов, но здесь не определены базовые классы для class A, а просто описаны: int x;, void *y;. Тогда почему, возможно вызывать эти элементы как базовые классы? Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 13 сентября, 2011 Поделиться Опубликовано 13 сентября, 2011 Не буду создавать дополнительную тему, так что продолжу эту. Проект представляет собой DLL, которая инжектится любым инжектором. Польза - получение адреса d3d9.dll Ошибка сотоит в том, что ругается:аргумент типа const char не совместим с параметром типа LPCWSTRDWORD D3DADDRESS = NULL; while(D3DADDRESS == NULL) { D3DADDRESS = (DWORD)GetModuleHandle("d3d9.dll"); }Изменено:Забыл про GetModuleHandleA Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 28 сентября, 2011 Поделиться Опубликовано 28 сентября, 2011 Я хочу вместо WiriteProcessMemory использовать memcpy, ведь dll аттачится к процессу, значит, необходимости в WPM. Следующий код даёт возможность убрать туман войны и видеть, где строится компьютер в Galactic Battlegrounds:BYTE NoFogOfWar[] = {0x75, 0x12};WriteProcessMemory(BATTLEGROUNDS, (void*)0x00425FC7, &NoFogOfWar, 2, 0);Для memcpy:memcpy((LPVOID)0x00425FC7, "\x75\x12", 2);Для примеры с WriteProcessMemory всё работает, для memcpy - игры вылетает сразу же после инжекта.Полный код:#include <windows.h>void __stdcall FogOfWar(void){ for(;; Sleep(200)){ if(GetAsyncKeyState(VK_NUMPAD1)){ memcpy((void*)00425FC7, "\x75\x12", 3); } }}int __stdcall WINAPI DllMain(HINSTANCE hModule, DWORD dwAttached, LPVOID lpvReserved){ if(dwAttached == DLL_PROCESS_ATTACH) CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)FogOfWar, NULL, NULL, NULL); return 1;}В чем проблема? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 сентября, 2011 Автор Поделиться Опубликовано 28 сентября, 2011 memcpy((void*)4553935, "\x75\x12", 3);Вместо "\x75\x12" должен быть указатель на данные. Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 28 сентября, 2011 Поделиться Опубликовано 28 сентября, 2011 memcpy((void*)4553935, "\x75\x12", 3);Вместо "\x75\x12" должен быть указатель на данные.MasterGH, необязательно, эта функция лишь копирует данные. Я ошибся , вставив 10-тичное число 4553935, это я экспериментировал, и указал не тот размер, не 2 а 3 ))Добавил VirtualProtect, вроде всё заработало, тьфу тьфуunsigned long Protection;VirtualProtect((void*)0x00425FC7 2, PAGE_READWRITE, &Protection);memcpy((LPVOID)0x00425FC7, "\x75\x12", 2);VirtualProtect((void*)0x00425FC7, 2, Protection, 0); Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения