Перейти к содержанию

Рекомендуемые сообщения

 

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;. Тогда почему, возможно вызывать эти элементы как базовые классы?  :)

Ссылка на комментарий
Поделиться на другие сайты

  • 8 месяцев спустя...

Не буду создавать дополнительную тему, так что продолжу эту. Проект представляет собой DLL, которая инжектится любым инжектором. Польза - получение адреса d3d9.dll Ошибка сотоит в том, что ругается:

аргумент типа const char не совместим с параметром типа LPCWSTR


DWORD D3DADDRESS = NULL;
while(D3DADDRESS == NULL)
{
D3DADDRESS = (DWORD)GetModuleHandle("d3d9.dll");
}

Изменено:

Забыл про GetModuleHandleA

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Я хочу вместо 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;
}

В чем проблема?

Ссылка на комментарий
Поделиться на другие сайты

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);

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.