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

Как узнать значение регистра на C++


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

Допустим в игре есть код:

movss [eax+18], xmm4

По адресу в eax со смещением 18 хранится нужное мне значение. Как мне его узнать без внедрения инекции? Возможно через дизасемблер типа BeaEngine?

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

Если без инъекции в классическом ее понимании, то ты можешь написать простейший отладчик. Для этого понадобится выяснить, что такое брейкпоинт (инструкция int 3), например и достать где-нибудь дизассемблер длин инструкций. Ставишь брейкпоинт на адрес нужной инструкции, сохраняешь ее, зная длину, оставшиеся байты балансируешь nop-ами. Восстанавливаешь процесс и ждешь срабатывания исключения от брейкпоинта, как сработало - используешь inline-ассемблер, чтобы вытащить данные из регистра, восстанавливаешь оригинальную инструкцию и отцепляешься от процесса.

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

Нельзя менять код или инструкцию. Я бы хотел способом как в cheat engine - what access, what write... Чтобы это было на лету без вмешательства в структуру кода. Есть такая возможность?

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

Я описал один из способов, который использует Cheat Engine. Еще один вариант - у тебя есть пара регистров CS:EIP, которые указывают на адрес инструкции относительно начала секции кода, можно следить за этим значением и в нужный момент остановить программу, прочитать значение регистра и выйти. Как именно это делается - фиг знает, я никогда так не пробовал делать.

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

Допустим в игре есть код:

movss [eax+18], xmm4

По адресу в eax со смещением 18 хранится нужное мне значение. Как мне его узнать без внедрения инекции? Возможно через дизасемблер типа BeaEngine?

 

BeaEngine может дизссемблировать код, но не читать регистры из контекста потока. Значение регистра eax можно узнать средствами отладки (функции WinAPI) . 

 

Toggle hardware data/read/execute breakpoints programmatically - link

Debugging Functions (MSDN) - link

 

Бряк в данном случае лучше ставить аппартный, а не int3. Для этого есть специальные регистры отладки, но их не так много. И еще аппартный бряк выполняет инструкцию, а потом прерывается. Т.е.если mov eax,[eax+4], то левый eax прочтешь, но не в скобках

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

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

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

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