Подскажите, пожалуйста, поддерживает ли дизассемблер IDA формат исполняемых файлов Win16 (NE - вроде New Exetutable)? IDA Free не поддерживает - проверял. Нужно чтобы покопаться в коде одной старой версии Тетриса под Вынь16.
LE поддерживает точно (ну или типа того, возможность корректно загрузить есть) Касательно NE: (ida64.dll) Код (Text): 26F730h 4E 65 77 20 45 78 65 63 75 74 61 62 6C 65 20 28 New Executable ( 26F740h 4E 45 29 00 00 00 00 00 49 6E 74 65 6C 20 48 65 NE).....Intel He 26F750h 78 20 4F 62 6A 65 63 74 20 46 69 6C 65 00 00 00 x Object File... 26F760h 4D 4F 53 20 54 65 63 68 6E 6F 6C 6F 67 79 20 48 MOS Technology H 26F770h 65 78 20 4F 62 6A 65 63 74 20 46 69 6C 65 00 00 ex Object File.. 26F780h 4C 69 6E 65 61 72 20 45 78 65 63 75 74 61 62 6C Linear Executabl 26F790h 65 20 28 4C 58 29 00 00 4C 69 6E 65 61 72 20 45 e (LX)..Linear E 26F7A0h 78 65 63 75 74 61 62 6C 65 20 28 4C 45 29 00 00 xecutable (LE)..
Как запасной вариант. ghidra-master\Ghidra\Features\Base\src\main\java\ghidra\app\util\opinion\NeLoader.java Код (Text): public class NeLoader extends AbstractLibrarySupportLoader { public final static String NE_NAME = "New Executable (NE)"; private static final String TAB = " "; private static final long MIN_BYTE_LENGTH = 4; private static final int SEGMENT_START = 0x1000; private ArrayList<Address> entryPointList = new ArrayList<>(); private Comparator<String> comparator = new CallNameComparator(); public NeLoader() { } ...
Основной конкурент иды. В некотором смысле даже не конкурент, просто на иду сила привычки пока работает.
Инфа сотка, что поддерживает. Она и DOS поддерживает. Но только на уровне дизассемблера, не декомпилятора. Что, конечно же, огорчает.
Вот собственно архив с игрой (файл TETRIS.EXE) https://disk.yandex.ru/d/m7RyDEq8v9fmYg Скачал с рутрекера IDA версии 6.1 Ищу как можно вызвать пасхальное яйцо (если это вообще возможно). Интересуют обведенные строки на картинке. Только непонятно как определить обращается ли программа к этим строкам. Опыт работы с IDA можно сказать на уровне получения листинга на ассемблере. Знание ассемблера тоже достаточно слабое.
16 бит обязывают к такому геморрою как жонглирование значениями сегментных регистров. А дизассемблер видит только те референсы, где относительно значения DS он уверен. Если со строчками, идущими перед искомыми, все очевидно: Код (Text): 1008:07a8 "TETRIS.INI" ;1000:44a2 MOV AX,0x7a8 1008:07b3 "TETRIS.HST" ;1000:44da MOV AX,0x7b3 1008:07be "TETRIS.HST" ;1000:44f1 MOV AX,0x7be 1008:07c9 "TETRIS.HST" ;1000:4546 MOV AX,0x7c9 1008:07d4 "TETRIS.HST" ;1000:455d MOV AX,0x7d4 1008:07df "TETRIS.HST" ;1000:456e MOV AX,0x7df Их смещения относительно начала сегмента - аргументы функции, летят в стек перед значением DS. А оффсетов для этих двух строчек в программе совсем нету. Никогда нельзя исключать, что адрес формируется динамически, но если не знать базу, можно очень долго искать где и как они адресуются. Я бы поставил на то, что они не используются вообще, слишком уж хорошо всё получается с любой другой строчкой в программе.
Ладно, главное что автор программы оставил эти строчки. Я их нашел, просматривая екзешник в Тотал Коммандере. Это без сомнения Пасхальное Яйцо, но может оно никак не вызывается в программе. По крайней мере интересно, что программист оставил какие то личные сообщения.
16-битный асм относительно прост. Тут не пасхальное яйцо скорее всего, а просто автор на волне влюблённости вставил эти строки в код. Компилятор не удалил их (хотя должен был, если оптимизации всякие включены). Искать оффсеты очень просто: смотрим адрес строки: "dseg02:07EA". Далее в IDA ищем текст (Alt+T в начале, далее Ctrl+T для продолжения) "7EA" и ничего путного не находим. Потом ищем текст "810" (следующая интересующаяся строка) - и снова ничего путного. Для чистоты эксперимента ищем байты (Alt+B) "EA 07" и "10 08" - снова пусто. С высокой долей вероятности код не обращается к этим строкам. Само собой, в ассемблере есть 1000 и 1 способ получить адрес интересующей переменной. Но тут код создан компилятором, а они этим не занимаются. Юнит-тест: смотрим адрес "dseg02:0665" - на него тоже нет ссылок (Ctrl+X). Но ищем текст "665" - и оппа! - находим ссылку на него по адресу "cseg01:30A8". Аналогично с "dseg02:0681".
Да, скорее всего. Автора по ходу зовут Dave Edson Строки, которые он оставил: Dave loves Kate more than Chocolate!! Omar sez: Kappa Sigs Rock!!! Первая строка - то что он любит свою подругу Kate, а вторая не очень понятна, какой то слэнг. Может что то про музыку. "sez" возможно это "says" ("говорит"), по крайней мере созвучно.