RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : А вот вопрос, однако...


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : valerius
To : Andrew Belov
Subj : А вот вопрос, однако...

> > ppl!, а вот ответьте плз на такой вопрос: можно ли реально бинарник (драйвер или EXE в формате LX) прогнать через дизассемблер; полученный сорец на ассемблере модифицировать (конкретно надо файл на ассемблере прогнать через некий преобразователь, на выходе которого получается опять файл на ассемблере), и затем снова прогнать через ассемблер и линкер, и чтобы после этого опять получился рабочий исполняемый файл?
>
> Если взять какой-нибудь IDA и вручную выловить распространенные ляпы перед экспортом в .ASM, то да. Модифицировать во многих случаях будет даже проще и свободнее, чем DOS'овские MZ-EXE.

Вот, [Pasha] на #os2russian тоже подсказал почти то же самое: взять файл вместе с .sym'ом, к нему прилагающимся, и скормить IDA. По именам функций легче будет выловить ляпы дизассемблера.

> Но добавляются две проблемы: выбор ассемблера (синтаксис + побайтовое совпадение, если оно нужно)

не совсем понял: побайтовое совпадение чего с чем? исходного и получившегося бинарника? -- это вроде не нужно.

> и придумывание DEF-файла для сложных случаев.
>

Да.., а вот теперь про смысл всего этого -- я нашел любопытный проект: l4ka.org (Pre-virtualization with compiler afterburning). -- Это про виртуальные машины и гипервизоры -- Есть ОС с сорцами (эксперименты проводятся на линухе). Ассемблерные файлы на выходе компилятора преобразуются спец. конвертером -- между некоторыми ("virtualization-friendly") инструкциями вставляется свободное место -- padding инструкциями NOP, а также, в специальной секции ELF-файла для модифицированных мест вставляются специальные аннотации. Полученные ассемблерные файлы компилируются и получается "virtualization-friendly binary" -- без изменений работает на гипервизорах Xen v.2, Xen v.3, L4а также на голом железе.

Смысл в том, что при загрузке ядра монитор виртуальной машины патчит инструкции на месте свободного пространства из NOP'ов так, что туда вставляются вызовы этого монитора. Монитор имеет специальную версию для каждого гипервизора. То есть, ядро ОС работает через вызовы монитора VM, а тот, в свою очередь -- через механизмы гипервизора. (подробнее можно прочитать на упомянутой странице)

Я чего подумал. -- А если эту штуку применить к осевому ядру? По идее, нужны сорцы. У оси их вроде бы, нет (правда, есть "утекшие" сорцы Мерлина...), но что если дизассемблировать?

Тогда можно будет ось запускать под Xen и L4... Причем, вместе с драйверами. А можно драйвера без ядра -- ядро заменить на эмулятор интерфейсов ядра... --если писать ядро ОС на основе L4, то это может дать возможность использовать драйвера OS/2 (возможно, даже 16-битные (?!))

Тут конечно, есть проблемы:
1) Тулза-преобразователь, о которой шла речь, работает с AT&T-синтаксисом ассемблера, а IDA вроде выдает только интелёвый (может быть, есть конвертер AT&T<-->intel?)
2) Ядро ОС должно быть в формате ELF, а не LX
3) Пока непонятно, не помешают ли 16-битные фрагменты в ядре OS/2 -- все-таки, тестировалось это на линухе, а линух полностью 32-битный..


Sun 17 Jun 2007 00:19 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.7.10) Gecko/2005




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.