Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot (+5 невидимых)

 eXeL@B —› Программирование —› Дизассемблер длин от Ms Rem и определение относительной адресации
Посл.ответ Сообщение

Ранг: 2.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июня 2009 16:47
· Личное сообщение · #1

Доброго времени суток!
В указанной в теме дизассемблере длин есть функция для определения команды с относительной адресации:
Код:
char __fastcall IsRelativeCmd(unsigned char *pOpcode)
{
UCHAR Flags;
if (*pOpcode == 0x0F) Flags = OpcodeFlagsExt[*(PUCHAR)((ULONG)pOpcode + 1)];
else Flags = OpcodeFlags[*pOpcode];
return (Flags & OP_REL32);
}

Так вот, в случае если первый байт команды не 0x0F, то берется значение флага из массива OpcodeFlags по индексу значение опкода. И вот я смотрю этот массив и вижу что флаг относительно адресации стоит по индексам 0xE8, 0xE9 и..... почему-то 0xFF:
Код:
OP_DATA_PRE66_67 | OP_REL32, // E8
OP_DATA_PRE66_67 | OP_REL32, // E9
..................
OP_MODRM | OP_REL32 // FF

Из Intel документации так:
Код:
FF /4 JMP r/m16 N.S. Valid Jump near, absolute indirect, address =
sign-extended r/m16.
FF /4 JMP r/m32 N.S. Valid Jump near, absolute indirect, address =
sign-extended r/m32.

Вроде абсолютный адрес тут . Или я не правильно понимаю что-то?



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 июня 2009 22:14
· Личное сообщение · #2

paymera
Прошу меня простить великодушно, я не смотрел конкретно твою проблему, так как документация Intel не со мной.

Но одно я знаю точно - в LDasm есть куча багов. Которые надо либо исправлять, либо брать другой дизасм длин, либо писать свой с нуля. В частности сказано что длина функции определяется до первого RET. Но почему-то по факту возвращаемая длина включает байт инструкции RET и почему-то инструкции вида RET 0Ch не считаются концом процедуры. Эти баги исправлены в моей версии дизасма, которую я прикручиваю к своим проектам, но в будущем перепроверю по спецификациям весь код.

Пока совет один - взять другой дизассемблер длин.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 июня 2009 22:17
· Личное сообщение · #3

paymera пишет:
Вроде абсолютный адрес тут

Хм, посмотрел. Да ты прав. Это ещё одна ошибка.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 04 июня 2009 22:56
· Личное сообщение · #4

Hacker Disassembler Engine 32
version: 0.28

Vyacheslav Patkov: Home Page
Hacker Disassembler Engine @VX Heavens

-----
EnJoy!





Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 04 июня 2009 23:35
· Личное сообщение · #5

progopis

Ты свой вариант скинь - я по нему также VB вариант поправлю. Дабы двойной работы не делать.

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 04 июня 2009 23:55 · Поправил: Модератор
· Личное сообщение · #6

мне очень приглянулся VirXasm32 у мс-ремовский не плох, но багов там хватает.

-----
[nice coder and reverser]




Ранг: 2.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 июня 2009 01:28
· Личное сообщение · #7

все понял, благодарю за ответы


 eXeL@B —› Программирование —› Дизассемблер длин от Ms Rem и определение относительной адресации
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати