|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 21, 2004 01:34:20 Подскажите пожолуйста, каким образом можно определить длину данной процедуры(разность между адресом команды ret и адресм процедуры). Хотелось бы также узнать, как можно из массива байтов кода выделить команнды. Например, есть такая чаcть кода $A186ECFF861658, причем команды распологаются таким образом:| A1 | 86EC | FF | 861658 |. Спаибо. |
|
|
Дата: Июн 21, 2004 01:53:05 · Поправил: The Svin 1. Ты вроде сам ответил на вопрос :) Только почему то "выкинул" в своём вычислении длину команды ret ;) Также можно сказать что само вычисление верно (с указанной выше поправкой) только если ret была последней командой в теле процедуры. У меня в практике часто возврат распологается где то в начале кода, чтобы была возможность в различных ситуациях переходить на него по jcc. 2. Непонятен вопрос про то "выделить команды". Зная начало кода найти адреса каждой из команд? |
|
|
Дата: Июн 21, 2004 12:53:20 > Хотелось бы также узнать, как можно из массива байтов кода выделить команнды. Например, есть такая чаcть кода $A186ECFF861658, причем команды распологаются таким образом:| A1 | 86EC | FF | 861658 |. Это называется "Мне нужен дизассемблер". |
|
|
Дата: Июн 21, 2004 13:08:06 Zdesbilmax Вобще в большинстве ассемблеров есть такая вещь, как препроцессор. Например, в фасме можно после нужной инструкции (до которой считаешь) написать: procsize = $-MyProc и получишь нужное число. |
|
|
Дата: Июн 21, 2004 13:28:00 > Вобще в большинстве ассемблеров есть такая вещь, как препроцессор. Угу, только эта фича не всегда применима, например когда процедура находится в секции .DATA то masm, например, не может правильно высчитать ее размер. |
|
|
Дата: Июн 21, 2004 16:39:44 The Svin: Тогда возникает вопрос, как найти адрес "ret". Не факт, что просматривая байты от начала процедуры и далее и найдя код команды ret, это будет действительно команда ret. Найденый байт может быть,например, составной частью адреса операнда и т.д. Может я мыслю не в том направлении? За неправильное вычисление длины спасибо, не заметил. Dr.Golova, n0p, Asterix: Я все пишу на ObjectPascal и использую встроенный в Delphi 6 ассемблер. Насколько я понимаю, никокой препроцессор мне не светит(я,честно говорю, смутно представляя ,что это такое и чем это запивают), но есть мысль: пошагово выполнять некоторые части процедуры и следить за EIP. Реально ли это осуществить(может создавать дочерний процесс, не боясь краха основного...). Я использую W2k. |
|
|
Дата: Июн 21, 2004 16:52:40 Процедура своя? Ты просто хочешь узнать сколько она заняла? Тогда просто поставь бряк в начале процедуры и запусти в дебагере (например F9 в OllyDbg) она трапанётся на начале и ты в дебагере посчитаешь разницу между адресами. Простым просмотром значения байт ты действительно не определишь ret, всё правильно, прийдётся писать декодер, так что коротко тут не ответить :) |
|
|
Дата: Июн 21, 2004 17:15:09 мысль: пошагово выполнять некоторые части процедуры и следить за EIP. Реально ли это осуществить(может создавать дочерний процесс, не боясь краха основного...). Я использую W2k. может тебе трейсер нужен? на z0mbie.host.sk есть |
|
|
Дата: Июн 21, 2004 17:16:20 Функция API, придется каждый раз ручками все делать. Спаибо за все. |
|
|
Дата: Июн 22, 2004 00:12:13 LDE-32 v1.04 -- Length-Disassembler Engine, ~29k http://z0mbie.host.sk/lde32.zip Делать RTFM пока не поможет. |
|
|
Дата: Июн 22, 2004 01:08:52 Dr.Golova А чё Каспер на архив(файл example1.exe) ругается то? Вряд ли вирь но всё-таки ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.086 |