· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Что такое дельта-смещение

Посл.отвђт Сообщенiе


Дата: Авг 20, 2003 10:10:39

Начал читать belcebu.

У него вычисляестся какое то дельта-смещение
"Грхм, я предполагаю, что вы, по крайней мере, нормальный asm-кодер, то есть знаете, что первый блок инструкций предназначается для получения дельта-смещения"

:( оказывается я не нормальный асм кодер.


xxxx1000 call delta
delta:
xxxx1005 pop ebp
xxxx1006 sub ebp,offset delta

Как я раньше понимал, этот код должен сделать вот что:
1. запизивать в стек адрес возврата,
в данном случае хххх1005
2. вынуть его в ebp
3. вычесть из ebp смещене "delta:"
Как я понимал в еbp в результате всех этих операций должен оказаться ноль.

Пытаюсь дебажить этот код (ну правда дебагер у меня глюкавый слегка), получаю следующее:
pop ebp заносит в ebp вовсе не хххх1005, а хрен знает какой большой адрес, где то внутри SetFileDateTimeToTime :(((

Что это за фигня такая, кто нибудь объяснить может?


Дата: Авг 20, 2003 11:14:06

xxxx1000 call delta
delta:
xxxx1005 pop ebp
xxxx1006 sub ebp,offset delta

Как я понимал в еbp в результате всех этих операций должен оказаться ноль.

На самом деле в результате этих операций должен получиться вовсе не ноль, а .. дельта смещение. :-))
Здесь все зависит от того, в каком контекстве ты рассматриваешь этот код, и что такое "offset delta".
Если ты имеешь в виду присоединенный к экзешнику код, который находится по заранее не известному адресу, то EIP при выполнении инструкции call будет вовсе не xxxx1000h. Поэтому и результат вычисления будет отличен от нуля.
Если же ты просто компиляешь вышеприведенный код, то EIP совпадает с указанным тобой и дельта, естественно, равна нулю.

P.S. Да, дебаггер у тебя глюкавый.


Дата: Авг 20, 2003 12:23:45

Те, как я понял, то что call сует мне в стек адрес где то в SetFileDateTimeToTime это глюк дебагера (SI) :((

одно замечание: дебагер вываливаеться у меня при запуске такой программы не на call, а уже на pop :( почему-то. Может с этим связано, то что в стеке адрес мусорный получается. Хм.. попробую nop поставить перед вызовом -интересно куда он вывалится.

В общем, как оказывается кодер я все таки нормальный и понимаю все правильно, спасибо, успокоили :)


Дата: Авг 21, 2003 10:40:24

ОК, еще один вопросик по дельта смещению:
Как я думаю алгоритм такой как у belcebu не универсальный, те код exe ведь не обязательно должен начинаться с 00401000. Или обязательно?


Дата: Авг 21, 2003 14:13:55

[ Zervide: Или обязательно? ]

Нет. Теоретически с любого доступного адреса.


Дата: Авг 22, 2003 08:59:38

:) тогда остается только просканировать память уменьшая адрес на первый встретившийся PE?


Дата: Сен 13, 2003 14:47:31

Я тоже когда-то парился с Delta-смещением.
Лучший способ понять зачем оно и почему это отладить прогу где оно используется. Например invisibility by y0da
http://y0da.cjb.net


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047