Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Алгоритм дизассемблирования


Автор: zss 23.8.2004, 15:48
Может кто когда-нибудь пытался написать небольшой дизассемблер ?

Есть описание форматов инструкций, опкодов и т.д.

Хотелось бы узнать сам алгоритм (вопрос также относится к быстродействию и определению защиты от дизассемблировани).

Может также у кого-нибудь есть готовые структуры данных для облегчения ?

З.Ы. Если есть, то можно ссылочку на разбор алгоритма и т.п.

Спасибо

Автор: gepard 23.8.2004, 17:53
Я этим не занимался, но считаю что надо начинать с разборки машинного языка.

Автор: YAA 25.8.2004, 23:05
Привет, ZSS!
На тему дизассемблеров: в инете много всяких исходников.
Можно попытаться дизассемблировать Sourcer hehe.gif

p.s.
Можеш кинуть на мыло (yaamail@rambler.ru) описание опкодов?

Автор: zss 26.8.2004, 08:18
YAA, в каком смысле. Тебе нужны опкоды ?

Автор: Akina 26.8.2004, 08:25
Собсно говоря самое сложное при дизассемблировании - определение границ кода и блоков данных. Т.е. - имеем поток байтов. С какого ни начни - по-любому его можно интерпретировать как код (я, кстати, писАл программы, в которых один и тот же код исполнялся 2 раза с разных точек - его дизассемблировать корректно вообще невозможно, скажем тот же Сорсер выдавал дизассемблированный текст в виде пачки DB). Но основной принцип решения этой задачи - поиск точек однозначного выполнения и поиск несуществующих инструкций, это дает возможность однозначно определить границы инструкций. Блоки данных ищутся по адресам, содержащимся в операндах инструкций - впрочем и тут бывает динамическое изменение кода, что мешает автоматическому дизассемблированию. В файлах EXE-формата нужно также ориентироваться на положения релокейшнов - это либо адреса, либо мусор, либо изменяемый код.

А переварить отдельную инструкцию в ее АСМовский вид - занятие для первоклассника...

Автор: YAA 26.8.2004, 08:41
ZSS, мне нужны опкоды и краткие описания комманд (у меня только 80x86 ;) ).

Автор: Akina 26.8.2004, 12:25
http://developer.intel.com/design/pentium4/manuals/index_new.htm
http://www.swansontec.com/sintel.htm
И вообще поиск рулит...

Автор: YAA 26.8.2004, 14:42
Спасибо за ссылки, Akina!
Правда в сумме около 10мб.....

Автор: Jin X 26.8.2004, 22:33
Вообще, можешь ещё попробовать доки по NASM'у, там всё есть (в т.ч. и недокументированные). Весит гораздо меньше smile.gif
Ссылка есть в http://forum.sources.ru/index.php?showtopic=42348 ;)

Выглядит это так:
Код
      TEST r/m8,reg8              ; 84 /r                [8086]
      TEST r/m16,reg16            ; o16 85 /r            [8086]
      TEST r/m32,reg32            ; o32 85 /r            [386]
Про расположение и кодирование битов (типа o16) тоже что-то написано. По идее, этого долно быть достаточно %)

Автор: YAA 27.8.2004, 08:05
Точно! NBASM - New Basic Assembler - попробуй и его (open-source), хотя это ассемблирование, но опкоды-то есть. ;)

Автор: Jin X 27.8.2004, 19:01
Нет, не NBASM, а NASM - Netwide Assembler smile.gif
Это разные вещи. NBASM - это кто-то решил написать свой ассемблер, а потом он каким-то чудесным образом стал попадать в разные списки ассемблеров (вместе с FASM, NASM, GoAsm, SpAsm и т.д) smile.gif. Я с ним особо не разбирался, но вроде как в нём нет ничего особенного. А вот на счёт OpenSource - это для меня новость smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)