.Net C # ReadProcessMemory Функция указателя возвращает адрес в обратном направлении. - PullRequest
2 голосов
/ 26 августа 2011

Я новичок в размещении сообщений на этих форумах, но приходил сюда несколько раз для нужд моей помощи в программировании и, как правило, довольно легко находил ответы на свои вопросы, но я боюсь, что, возможно, я задаю не тот тип вопросов или, возможно, очень очевидно, и я просто не вижу этого, но вот моя проблема.

Я делаю свой первый тренер для Quake, я думал, что начну с малого с игры, в которой легко найти указатели вместо моих других игр, которые обычно имеют указатели уровня 2+. Поэтому я прошёл Quake с Cheat Engine и взял все нужные мне указатели, сделал мой графический интерфейс и т. Д., Но есть проблема. Я прочитал мой первый указатель, и он возвращает адрес, который мне нужен в обратном направлении: /

Пример:

Вот мой указатель, с которого я читаю - 006C5214

при чтении дает мне этот адрес - 02BFD940

Затем я добавляю свое смещение 48C к указанному выше адресу, который направляет меня к 02BFDDCC, в котором содержится нужное мне значение.

когда я читаю мой указатель с помощью ReadProcessMemory, я получаю правильный адрес, за исключением того, что он обратный (порядковый номер?)

Мне нужно 02BFD940 Я получаю 40D9BF02

Я перепробовал все, что мог придумать, чтобы перевернуть ордер и вернуть его обратно в IntPtr для использования в моем ReadProcessMemory / WriteProcessMemory. Я могу перевернуть его в нужном мне порядке, потому что мой ReadProcessMemory дает мой адрес, например 40-D9-BF-02, который легко разрезается на массив с помощью Split ('-');

Единственная проблема заключается в том, что после того, как я закончу разделять и переупорядочивать его так, как я хочу, я не смогу преобразовать его обратно в IntPtr для использования с функциями чтения и записи в память.

Я всегда занимался редактированием памяти с помощью чит-движка или дизассемблера. Это моя первая попытка полностью работающего тренера, любая помощь в решении моей проблемы будет высоко оценена. Я попытался установить логический порядок байтов на моем BitConverter, но он доступен только для чтения: /

Если я что-то упустил полностью, и это прямо передо мной, не стесняйтесь звать меня на это и дать мне пощечину xD Я не против.

-P.S. Форум твоих парней потрясающий.

1 Ответ

3 голосов
/ 26 августа 2011

попробуй

    byte[] buffer = new byte[4];
    int bytesread;

    ReadProcessMemory(hProcess, dwAddress, buffer, 4, out bytesread);

    IntPtr P = new IntPtr (BitConverter.ToInt32(buffer, 0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...