Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Известен адрес, он записан в переменную ассемблера, пример,
Код:
unk_7FF67EEFE300
.
Как сформировать опкоды для такой команды
Цитата:
Код:
lea rcx, unk_7FF67EEFE300
чтобы затем, по побайтовой сигнатуре уже найти все подобные команды в памяти процесса.
arvitaly вне форума Ответить с цитированием
Старый 25.12.2017, 11:30   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

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

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

Ах вот оно в чем дело! Потому что смотрю опкод, пример,
Код:
4C 8D 0D 01 C6 4F 01
и тут близко нет адреса, получается тут смещение. А не подскажите, как сформировать реальный адрес тогда?
arvitaly вне форума Ответить с цитированием
Старый 25.12.2017, 12:04   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

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

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

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

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все данные от определенной даты Veryky C# (си шарп) 1 12.03.2016 23:06
Ожидание процесса, команды batch OmegaBerkut Windows 11 19.04.2015 10: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 16:54