![]() |
eXeL@B —› Программирование —› Дизассемблер длин от Ms Rem и определение относительной адресации |
Посл.ответ | Сообщение |
|
Создано: 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. Вроде абсолютный адрес тут . Или я не правильно понимаю что-то? ![]() |
|
Создано: 04 июня 2009 22:14 · Личное сообщение · #2 paymera Прошу меня простить великодушно, я не смотрел конкретно твою проблему, так как документация Intel не со мной. Но одно я знаю точно - в LDasm есть куча багов. Которые надо либо исправлять, либо брать другой дизасм длин, либо писать свой с нуля. В частности сказано что длина функции определяется до первого RET. Но почему-то по факту возвращаемая длина включает байт инструкции RET и почему-то инструкции вида RET 0Ch не считаются концом процедуры. Эти баги исправлены в моей версии дизасма, которую я прикручиваю к своим проектам, но в будущем перепроверю по спецификациям весь код. Пока совет один - взять другой дизассемблер длин. ![]() |
|
Создано: 04 июня 2009 22:17 · Личное сообщение · #3 |
|
Создано: 04 июня 2009 22:56 · Личное сообщение · #4 Hacker Disassembler Engine 32 version: 0.28 ----- EnJoy! ![]() |
|
Создано: 04 июня 2009 23:35 · Личное сообщение · #5 |
|
Создано: 04 июня 2009 23:55 · Поправил: Модератор · Личное сообщение · #6 |
|
Создано: 05 июня 2009 01:28 · Личное сообщение · #7 |
![]() |
eXeL@B —› Программирование —› Дизассемблер длин от Ms Rem и определение относительной адресации |