Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 25.12.2017, 12:22   #1
arvitaly
Форумчанин
 
Аватар для arvitaly
 
Регистрация: 01.08.2010
Адрес: Казань
Сообщений: 51
Репутация: 23
По умолчанию Найти все команды в памяти процесса, с определенной сигнатурой

Известен адрес, он записан в переменную ассемблера, пример,
Код:

unk_7FF67EEFE300

.
Как сформировать опкоды для такой команды
Цитата:
Код:

lea rcx, unk_7FF67EEFE300

чтобы затем, по побайтовой сигнатуре уже найти все подобные команды в памяти процесса.
arvitaly вне форума   Ответить с цитированием
Старый 25.12.2017, 12:30   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,476
Репутация: 1667
По умолчанию

Посмотреть в мануал процессора на предмет кодов инструкций и их параметров.

RCX предполагает х64 процесс, где может использоваться относительная адресация. Это означает, что реальный параметр инструкции будет зависеть от того, где эта инструкция находится.
waleri вне форума   Ответить с цитированием
Старый 25.12.2017, 12:40   #3
arvitaly
Форумчанин
 
Аватар для arvitaly
 
Регистрация: 01.08.2010
Адрес: Казань
Сообщений: 51
Репутация: 23
По умолчанию

Ах вот оно в чем дело! Потому что смотрю опкод, пример,
Код:

4C 8D 0D 01 C6 4F 01

и тут близко нет адреса, получается тут смещение. А не подскажите, как сформировать реальный адрес тогда?
arvitaly вне форума   Ответить с цитированием
Старый 25.12.2017, 13:04   #4
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,476
Репутация: 1667
По умолчанию

Прибавить смещение к регистру EIP, правда я не помню EIP должен указывать на текущую инструкцию или уже на следующую.

Если хотите дельный совет тогда озвучивайте проблему, а не ваш способ ее решения.
waleri вне форума   Ответить с цитированием
Старый 25.12.2017, 13:07   #5
arvitaly
Форумчанин
 
Аватар для arvitaly
 
Регистрация: 01.08.2010
Адрес: Казань
Сообщений: 51
Репутация: 23
По умолчанию

Хм, получается в памяти не получится найти все такие команды, раз нужно значение регистра знать?
arvitaly вне форума   Ответить с цитированием
Старый 25.12.2017, 13:11   #6
arvitaly
Форумчанин
 
Аватар для arvitaly
 
Регистрация: 01.08.2010
Адрес: Казань
Сообщений: 51
Репутация: 23
По умолчанию

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

Ну и я знаю, что в этой функции используется один из вариантов с lea
arvitaly вне форума   Ответить с цитированием
Старый 25.12.2017, 13:42   #7
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,476
Репутация: 1667
По умолчанию

Надо ручками, отладчиком найти хоть одно такое место и посмотреть смещение.
В дальнейшем всегда находить именно эту инструкцию и брать ее за основу а дальше, когда будем искать, вычислять нужное смещение на каждый адрес.
Например если инструкция по адресу 123 имеет смещение 123 то значит данные лежат по абсолютному адресу ABS, который равен 123 + 123.
Далее, инструкция по адресу 0, будем иметь смещение ABS, по адресу 1 - смещение ABS - 1, и т.д.
waleri вне форума   Ответить с цитированием
Старый 25.12.2017, 16:14   #8
arvitaly
Форумчанин
 
Аватар для arvitaly
 
Регистрация: 01.08.2010
Адрес: Казань
Сообщений: 51
Репутация: 23
По умолчанию

А секция .data одна может быть только? Т.е. для любой переменной один базовый адрес будет?
arvitaly вне форума   Ответить с цитированием
Старый 25.12.2017, 22:45   #9
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 285
Репутация: 147
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
я не помню EIP должен указывать на текущую инструкцию или уже на следующую
На следующую.

Цитата:
Сообщение от arvitaly Посмотреть сообщение
Хм, получается в памяти не получится найти все такие команды, раз нужно значение регистра знать?
Значение регистра RIP – это адрес следующей инструкции после текущей. Я думаю, не проблема его найти, раз мы знаем адрес текущей инструкции...

Цитата:
Сообщение от arvitaly Посмотреть сообщение
А секция .data одна может быть только? Т.е. для любой переменной один базовый адрес будет?
Что подразумевается под базовый адресом? Секций данных может быть несколько, как и секций кода. У одной переменной может быть только один адрес
__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Старый 25.12.2017, 22:49   #10
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 285
Репутация: 147
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
если инструкция по адресу 123 имеет смещение 123 то значит данные лежат по абсолютному адресу ABS, который равен 123 + 123.
Всё-таки смещением принято называть "offset" (собственно, абсолютный адрес как раз), а это корректнее называть относительный адрес (не знаю, какое слово подобрать для используемого в мануалах "displacement", т.к. среди переводов имеется и "смещение", но во избежание путаницы я бы не стал применять этот термин).
__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все данные от определенной даты Veryky C# (си шарп) 1 13.03.2016 00:06
Ожидание процесса, команды batch OmegaBerkut Windows 11 19.04.2015 11:18
Поиск в памяти процесса Mr_ViK Общие вопросы Delphi 5 27.08.2012 21:38
Чтение памяти процесса Maincore Win Api 12 14.08.2012 22:34
Редактирование памяти процесса Dima DDM Общие вопросы Delphi 0 25.12.2010 17:54


03:13.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru