Чёто вопроса не понял. Ты имеешь в виду перевод чисто текстового файла в ASM? Что то типа этого Код (Text): FC 31 C0 8E C0 8E D8 FA 8E D0 --> cld xor ax, ax mov es, ax mov ds, ax cli mov ss, ax Тогда ответ прост: нужно перевести файл в обычный бинарный и скормить дизасму.
вопрос задан некорректно у меня возникло несколько доп. вопросов: 1. HEX-код есть ассемблерные инструкции? т.о. EB05 -> jmp <..> или 9090 -> nop, nop тогда нужен дизассемблер, но тогда вопрос логичнее бы вглядел так: кто какой дизасм использует 2. HEX-код есть данные? т.о. hex-данные в asm код db 'blabla' или dd <данные> YoungBastard, по-конкретнее, пожалуйста.
копируешь в clipboard берёшь hiew открываешь любой файл в любом месте f3 дальше на системном меню говоришь изменить вставить всё
Jupiter я имел в виду, что бы можно было и узнать данные это или нет. Кстати, на мой взгляд лучше всего в winhex занести hex файл, а потом бинарник отдать иде. Узнает и данные и код. Хотелось бы какой-нить изощренный способ услышать=)
Если речь о том, чтобы взять кусок файла и определить, код это или данные, то можно попробовать частотный анализ. Дизассемблировать, а затем определить, сколько раз встречается каждая инструкция x86. В нормальном коде чаще всего встречается MOV (35%), затем PUSH(10%), CALL (6%), CMP (5%), ADD (4%), POP (4%). Если будет часто встречаться какая-нибудь POPAD или OUTSW, то это, скорее всего, не код. Изощренный способ, конечно, но ведь именно такой ты хотел услышать . В реальности проще юзать HEX-редактор + дизассемблер.
YoungBastard Попробуй Biew (http://biew.sf.net). Переключись в режим дизассемблера, затем F4 (Modify) и вставь свои hex-коды через системное меню. Вот еще один способ быстро (но не точно) определить, данные это или код. Нужно построить спектр, т.е. подсчитать, сколько раз встречается каждый символ в файле: Код (Text): memset(array, 0, 256); for(каждый символ в файле) array[значение символа]++ Или в WinHex - Tools > Analyse File. В коде x86 обычно бывает 3 максимума: 00, FF и 8B. 00 - потому что в 32-битных операндах старшие байты часто равны нулю (например, SUB EAX, 238h - 2D 38020000). FF - первый байт CALL (а также некоторых форм PUSH/JMP/INC/DEC), также в Relative CALL (opcode E8) часто встречается ссылка на n-ое число байтов назад (типа E8 52F4FFFF). Ну а 8B - это MOVE. Если в файле часто встречаются эти три байта, возможно, это код. Хотя некоторые компиляторы выдают код с другими максимумами. И на маленьких кусочках файлов этот способ работает крайне плохо (нужно несколько килобайт кода, чтобы набрать достаточно статистики).