|
|
| Посл.отвђт | Сообщен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 |