Гость

Арифметическое смещение

3 сообщения в этой теме

Доброго всем :)

Наткнулся на такую инструкцию: mov [ecx+ebp*8],edx

Собственно, ищу указатель на адрес, и напоролся на этого "зверя". Как узнать, какой именно здесь указатель?

8 или нужно сложить ecx и ebp и умножить на 8? Или как?

P.S.

Да, знаю что можно через АА скрипт сделать, и не париться. Но не хочется, так сказать, терять "сноровки" в других методах взлома, и хочется узнать что-то новое :)

0

Поделиться сообщением


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

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

2. По правилам математики, умножение обладает более высоким приоритетом, следовательно, в данном случае в ecx лежит "база", а ebp*8 - это смещение. То есть, получается, что в ecx - адрес первого элемента массива, в ebp - индекс текущего элемента массива, а 8 - это размер одного элемента массива.

3. Что нужно сделать? Нужно отследить состояние регистра ebp в момент выполнения и затем умножить его содержимое на 8. Тогда и получится "база" (ecx) + смещение (ebp*8).

Надеюсь, понятно объяснил.

0

Поделиться сообщением


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

Да, все совпало. Спасибо большое :)

0

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас