Asterix пишет:
А вот так это выглядит у меня в процессе работы(аттач),
это нормально?
Для нас это (0ab3_adaxx.png.zip) нормально. А у Вас есть претензии?
Asterix пишет:
Вроде пашет.
Результат похож на ваш, но у меня как я понял более старая версия ADApe, 1.0
В том, что 'пашет', мы и не сомневались. Вот взойдет ли? А версия Ваша действительно устарела. Обозначение 1.0 осталось от демоверсии. На нашем сайте выложена версия, которая должна обозначаться 1.1. Подготовлена расширенная версия ADAxx v1.1 с режимом доступа к просмотру и редактирования баз данных по окончании дизассемблирования до продуцирования исходника. Редактор базы данных работает во всех типовых форматах и позволяет пользователю устранить недочеты и возможные глюки ADAPE. (Смотрите раздел «Что нового» на нашем сайте).
В дальнейшем будем более внимательно подходить к нумерации версий.
Однако мы поместили этот пример не для доказательства функционирования ADAxx. Просто нас попросил DrGolova: "... Научите как сдлать тоже самое в ADA хотябы за то же время."
Хотелось бы, чтобы Вы, уважаемый Asterix, прокомментировали, за сколько это сделали Вы посредством ADAxx, да еще и в первый раз.
Asterix пишет:
с досом понятно, в дос adaxx работает, но попытки запустить под win98 провалились,
нехватка памяти xms, но как эту память добавить я так и не понял, через свойства
ярлыка можно только максимум 16384 байт выставить
"... через свойства ярлыка можно" выставить максимум 16384 Кб. Память XMS не измеряется в байтах. Но еще есть 'Auto' и еще можно просто вписать в окно, например, 64000 Кб. Тестирование в Win98 посредством входящего в него приложения mem.exe (Microsoft) показало, что при 'Auto' драйвер HIMEM отдает всю XMS память. У нас при сеансе с ADAxx так
Размер Свободно
Память XMS 67 043 328 258 732 032
При выборе в окне ярлыка 16384 Кб результат был следующий
Размер Свободно
Память XMS 67 043 328 16 384 000
Однако, что бы Вы не выбирали, Win98 отдает стабильно 2048 Кб. Остальная память куда-то исчезает. Поэтому претензии не к нам, а к Microsoft. Если какая-либо система Windows (98, 2000, ME, XP) официально разрешает из своей среды запускать приложения DOS, то обязана обеспечить разумные
требования этого приложения (память, переменные среды, драйверы и т.п), тем более, что любой Windows без ущерба для себя может выделить всю XMS память, работая на виртуальной подкачке. Microsoft же рекламирует, что Windows обеспечитает пользователю размер памяти до 2^64 байт? Или мы не так что-то поняли?
Тем не менее, Вы можете вместиться в 2 Мб и посмотреть работу ADAxx под Win98, если модуль небольшой и не запротектован. Для работы дизПротетора необходимо как минимум 64 Мб.
В пресловутой DOS мы обеспечиваем память 256 Мб и более, если позволяет компьютер. Скорость работы с памятью значительно выше, чем в Windows. А при дизпротектировании это весьма актуально.
PS. Win98 не использует напрямую диспетчер памяти HIMEM. Но EMM386 не может работать без HIMEM, т.к. ему необходима память XMS для отображаемой памяти. Возможно, EMM386 и забрал всю память у HIMEM.
sen пишет:
чой-то все замолчали дружно, типа некогда. ладно, потратим немножко времени.
Итак, 8 пунктов вынесенного нам смертельного приговора.
Мы начнем, пожалуй, вот с этого.
7.
DB 16 DUP (00h)
DB 12 DUP (00h)
в пАчему тут не '28 dup(0)' ? из каких таких соображений дизасм решил разбивать единый блок на несколько ? чтобы строк больше было?'
Отвечаем.
Если Вы всерьез считаете, что запись у DrGolova содержит меньше строк, то нам нет смысла продолжать беседу.
Этот же фрагмент в aspack.asm от DrGolova выглядит вот так:
.aspack:00406F3C 00 db 0
.aspack:00406F3D 00 db 0
.aspack:00406F3E 00 db 0
.aspack:00406F3F 00 db 0
.aspack:00406F40 00 db 0
.aspack:00406F41 00 db 0
.aspack:00406F42 00 db 0
.aspack:00406F43 00 db 0
.aspack:00406F44 00 db 0
.aspack:00406F45 00 db 0
.aspack:00406F46 00 db 0
.aspack:00406F47 00 db 0
.aspack:00406F48 00 db 0
.aspack:00406F49 00 db 0
.aspack:00406F4A 00 db 0
.aspack:00406F4B 00 db 0
.aspack:00406F4C 00 db 0
.aspack:00406F4D 00 db 0
.aspack:00406F4E 00 db 0
.aspack:00406F4F 00 db 0
.aspack:00406F50 00 db 0
.aspack:00406F51 00 db 0
.aspack:00406F52 00 db 0
.aspack:00406F53 00 db 0
.aspack:00406F54 00 db 0
.aspack:00406F55 00 db 0
.aspack:00406F56 00 db 0
.aspack:00406F57 00 db 0
По части остального вместо эпиграфа:
Как-то один мой знакомый принес в редакцию свои стихи. Редактор долго пялился на печатные строчки и, наконец, изрек:
"чтой-то у тебя буквы разной ширины? Разве это стихи?"
Так вот, Вы уж извините, но прежде, чем обсуждать публично работу какого-либо продукта, необходимо иметь о нем хотя бы элементарное представление. Хотя бы для начала внимательно прочитать информацию на сайте ADAxx.
Теперь по сути остальных пунктов.
1. зачем все константы заменять и писать их в отдельный INC ?
Отвечаем.
Вы что, на самом деле не знаете, зачем в языках программирования имена констант и переменных выносят в файлы 'include' ?
2. совсем не понял смысла замен типа 'ESIu_10 equ ESI+10h'
Отвечаем.
В расширенной версии ADAxx v1.1 введен модуль ASMC (конвертор файлов ASM), использование которого не обязательно, т.е. на любителя. ASMC модифицирует содержание файлов типа *.asm, сохраняя оригиналы под именами типа *.a__.
Уважаемый sen. Похоже, что в Вашей 'смотрелке' не все просматривается, так как файлы типа *.a__ там должны быть. А о вкусах не спорят.
3. нет референсов (CODE XREF: в иде) - списка адресов откуда была вызвана функция
Отвечаем.
По крупному счету это опять же дело вкуса и привычек. Мы рекомендовали воспользоваться редактором MULTI-EDIT, который загружает сразу все файлы типа *.asm и *.inc в разные карманы. Нам кажется, что найти вызов sub_406748 гораздо удобнее через поисковик, нежели по следующей записи:
.aspack:00406748 sub_406748 proc near ; CODE XREF: sub_406B07+13 p
.aspack:00406748 ; sub_406B07+30 p ...
Более того, в этой записи только 2 вызова, а как еще 3 обнаружить?
Многие ссылки ADAxx дает в несколько непривычной форме. Сравните:
.aspack:00406118 FF D7 call edi ; fake entry
;! Sub_00001000
call EDI
Или вот это:
.aspack:00406022 83 BD 22 04 00+ cmp ss

h_instance - unk_406013)[ebp], 0
.aspack:00406029 89 9D 22 04 00+ mov ss

h_instance - unk_406013)[ebp], ebx
;! DDt_00006435
cmp DWptr [EBPe_00000422],Byte_00
;! DDt_00006435
mov DWptr [EBPe_00000422],EBX
Все внешние ссылки приводятся в файлах *.inc, например, 06.inc:
; External label
EXTRN Sub_00001000:near
; Imported from module kernel32
EXTRN GetProcAddress:Far
4.
DDt_00006165 DD DWord_00620000
DDt_00006169 DD DWord_005F0000
че это за константы, когда в exe стоят нули. если хочется показать что туда в процессе выполнения попало - в коментарии
Отвечаем.
Опять налицо пробел в Вашй информации. У Вас нет понятия о работе дизПротектора ADPPE и о его продуктах по окончании сеанса. Еще раз поясняю, что основная задача дизПротектора - создать образы исходного модуля (как было до протектирования) и движка протектора для последующего дизАссемблирования. Касательно образа движка возможны следующие варианты:
1. Образ на момент начала его работы.
2. Образ на момент окончания его работы.
3. Образ на любом промежуточном этапе его работы.
4. Образ с восстановленным забитым кодом и многое другое.
Работа дизПротектора управляется набором внешних опций:
/UD /SA /SMxxxxxxxx /STxxxxxxxx /VM /SB /RB /RI
Меняя состав опций и адреса в них, Вы можете в итоге получить исходник движка протектора (в данном случае 06.a__, 06.asm) как на момент начала его работы, так и момент окончания его работы. Вам должно быть известно, что большинство движков протекторов на момент начала их работы запакованы и даже запротектованы и 'в exe' может стоять вовсе не то, что будет на самом деле. В обсуждаемом примере изображение движка снято на момент окончания его работы. Опция /RI не использовалась.
Любые промежуточные варианты исходника движка Вы можете получить сами посредством бесплатной версии ADAxx.
5.
Sub_000067B3 PROC near
ESPe_08 equ ESP+08h
ESPe_04 equ ESP+04h
...
mov EAX,[ESPe_04]
mov EDX,[ESPe_08]
тут уж точно замена а-ля идa 'Arg_08 equ ESP+08h' смотрится лучше
Отвечаем.
'а-ля' без комментариев, читайте выше про ASMC.
6.
call Sub_00006C96
; 00006A3F {0000183F}
Fic_00006A3F DB 8Ah, 8Ch, 30h, 3Ah, 40h, 44h
DB 00h
че за фигня ? дизасм не знает опкода 8Ah или почему ?
из Sub_00006C96 есть нормальный ret, подумаешь вложенная функция
Отвечаем.
В предоставленной на сайте ADAxx документации написано, что если семантический анализатор ADAxx имеет сомнения в части интерпретации какого-либо фрагмента кода, то в исходник