| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Алгоритм дизассемблирования |
| Автор: zss 23.8.2004, 15:48 |
| Может кто когда-нибудь пытался написать небольшой дизассемблер ? Есть описание форматов инструкций, опкодов и т.д. Хотелось бы узнать сам алгоритм (вопрос также относится к быстродействию и определению защиты от дизассемблировани). Может также у кого-нибудь есть готовые структуры данных для облегчения ? З.Ы. Если есть, то можно ссылочку на разбор алгоритма и т.п. Спасибо |
| Автор: gepard 23.8.2004, 17:53 |
| Я этим не занимался, но считаю что надо начинать с разборки машинного языка. |
| Автор: YAA 25.8.2004, 23:05 |
| Привет, ZSS! На тему дизассемблеров: в инете много всяких исходников. Можно попытаться дизассемблировать Sourcer 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'у, там всё есть (в т.ч. и недокументированные). Весит гораздо меньше Ссылка есть в http://forum.sources.ru/index.php?showtopic=42348 ;) Выглядит это так:
|
| Автор: YAA 27.8.2004, 08:05 |
| Точно! NBASM - New Basic Assembler - попробуй и его (open-source), хотя это ассемблирование, но опкоды-то есть. ;) |
| Автор: Jin X 27.8.2004, 19:01 |
| Нет, не NBASM, а NASM - Netwide Assembler Это разные вещи. NBASM - это кто-то решил написать свой ассемблер, а потом он каким-то чудесным образом стал попадать в разные списки ассемблеров (вместе с FASM, NASM, GoAsm, SpAsm и т.д) |