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


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

> А если (как мне уже подсказали) взять EXE не один, а с .sym-файлом -- и взять IDA, то по идее, адреса функций дизассемблер заменит на их имена? -- тогда изменение адресов функций несущественно, ведь ассемблер заново по расположению меток вычислит эти адреса -- так ведь?

Не совсем. Для дизассемблера это просто имена каких-то адресов в файле. Что находится по этим адресам: функции, переменные, точки, на которые направлены JMP-ы, или ещё что - он не знает.
Кроме того, в .sym есть адреса далеко не всех функций. И не всех переменных. Не говоря уж об упомянутых конструкциях вида "mov reg, offset чего-то" (или ещё хуже: "mov reg, offset чего-то - offset чего-то другого"), которые в коде представляют из себя просто "mov reg, число", без каких-либо упоминаний о происхождении этого числа.
В твоём случае ситуацию облегчает то, что все переменные остаются на своих местах, сдвинутся только функции. Хотя и это не сахар - нет гарантии, что все таблицы адресов функций дизассемблер распознает как таковые, да и в упомянутых выше командах вполне может оказаться смещение именно функции.
А ещё затею с декомпилированием именно ядра затрудняют два факта:
1) к нему нет .sym-файла, он уже давно разорван на две части из-за своих огромных размеров (ну, это можно поправить, написав свой скрипт для IDA). Но на самом деле тебе от sym-файла вообще толку мало: всё, что в нем для данной задачи есть полезного, и так содержится в заголовке LX-файла, а имена функций (которых в заголовке нет) для твоей затеи не интересны совершенно;
2)"дизассемблированное" Идой ядро 14.089e у меня есть (напрочь не помню, зачем я это делал). Совсем недалеко от его начала имеется длинный переход "jmp far ptr 74FFh:0F0A9h", и подобных переходов по тексту ещё немало раскидано. Куда они на самом деле должны привести, дизассемблер понятия не имеет.

"Хозяйке на заметку": дизассемблированный файл обычно примерно в десять раз больше, чем исходный EXE. Сколько лет нужно потратить на причёсывание того, что получится из более чем мегабайтного файла ядра?

Sun 17 Jun 2007 03:04 Mozilla/5.0 (OS/2; U; Warp 4.5; ru-RU; rv:1.7.12) 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.