Необходимо написать программу-транслятор (дизассемблер)
Необходимо написать программу-транслятор (дизассемблер), с
помощью которой можно преобразовывать машинный код (извлеченный из
elf-файла) в текст программы на языке ассемблера.
Код должен быть “чистый” и аккуратный.
Должен поддерживаться следующий набор команд RISC-V: RV32I,
RV32M. Подробнее (volume 1): https://riscv.org/technical/specifications/
Кодирование: little endian.
Вывод регистров: ABI. Регистр x8 выводится как s0.
Псевдонимы команд: псевдонимы команд парсить не нужно.
Обрабатывать нужно только секции .text, .symtab.
Для каждой строки кода указывается её адрес в hex формате.
Обозначение меток нужно найти в Symbol Table (.symtab). Если же
название метки там не найдено, то используется следующее обозначение:
L%i, например, L2, L34. Нумерация начинается с 0. Для каждой метки
перед названием указывается адрес (пример ниже).
Если встреченная инструкция не известна, то нужно вывести вместо
инструкции “invalid_instruction”.
Шаблон файла дизассемблера
Файл должен состоять из двух частей: .text и .symtab, отделенных
друг от друга одной пустой строкой. Сначала идет .text, затем .symtab.
Ниже приведены комментарии (строки, начинающиеся с 😉 и
форматы оформления. Формат строк указан по правилам printf (Си).
.text
; с меткой: "\n%08x \t<%s>\n", аргументы: адрес, метка
; без метки: адрес, hex код инструкции, инструкция, аргументы (ниже)
; инструкции с 3 аргументами: " %05x:\t%08x\t%7s\t%s, %s, %s\n"
; инструкции с 2 аргументами: " %05x:\t%08x\t%7s\t%s, %s\n"
; load/store/jalr инструкции: " %05x:\t%08x\t%7s\t%s, %d(%s)\n"
; J* инструкции с меткой: " %05x:\t%08x\t%7s\t%s, 0x%x <%s>\n"
; B* инструкции с меткой: " %05x:\t%08x\t%7s\t%s, 0x%x, <%s>\n"
; fence инструкции: " %05x:\t%08x\t%7s\t%s, %s\n"
; без аргументов: " %05x:\t%08x\t%7s\n"
; неизвестная: " %05x:\t%08x\t%-7s\n"
; immediate (константы): dec формат
; offset (в переходах J*, B*, в lui и auipc): hex формат
; пример ниже (отображение в ТЗ передаёт суть)
; пример в соответствии с форматом лежит в репозитории
; если формат в файле расходится с текущим условием, то
приоритетнее ; вывод в файле репозитория
00010074 <main>
10074: 00000013 addi zero, zero, 0
10078: 00100137 lui sp, 0x11
100a8: fcf42e23 sw a5, -36(s0)
; между секциями text и symtab 2 пустых строки
.symtab
; заголовок таблицы
; "\nSymbol Value Size Type Bind Vis Index Name\n"
; строки таблицы
; "[%4i] 0x%-15X %5i %-8s %-8s %-8s %6s %s\n"
; пример ниже (отображение в ТЗ передаёт суть), полный в репозитории
Symbol Value Size Type Bind Vis Index Name
[ 0] 0x0 0 NOTYPE LOCAL DEFAULT UNDEF
[ 1] 0x10074 0 SECTION LOCAL DEFAULT 1
[ 2] 0x112F8 0 SECTION LOCAL DEFAULT 2
[ 3] 0x0 0 SECTION LOCAL DEFAULT 3
[ 4] 0x0 0 SECTION LOCAL DEFAULT 4
[ 5] 0x0 0 FILE LOCAL DEFAULT ABS test.c
[ 6] 0x11AF8 0 NOTYPE GLOBAL DEFAULT ABS __global_pointer$
Про L метки: Когда в коде кто-то захочет перейти на определённый
адрес, у которого нет метки, то тогда ставим метку L%i. Рассмотрим
следующий случай:
100fc: fea794e3 bne a5,a0,100e4 <mmul+0x38>
В bne задан offset на адрес, для которого явно не определена метка.
Значит на 100e4 назначается метка (например, L0) и вашем коде дизасм
может выглядеть одним из следующих случаев (приведена часть строки):
bne a5, a0, 0x100e4, <L0>
Числа выводятся в следующем виде:
● отрицательные (пример для -3): dec: -3, hex (хранение в дополнении
до 2): 0xfffffffd
● положительные (пример для 11): dec: 11, hex (хранение в дополнении
до 2): 0xb
Fence: predecessor и successor выводится как буквы установленных
битов. Пример: fence rw, orw.
Аргументы программе передаются через командную строку:
<имя_входного_elf_файла> <имя_выходного_файла>
Также требуется:
1. Описание работы написанного кода: ЧТО БЫЛО РЕАЛИЗОВАНО
(32i, 32m, или всё из этого), и как вы реализовали (разбор elf файла,
парсинг команд). При описании работы написанного кода может
быть полезно приложить небольшие рисунки для иллюстрации
пояснений и ссылки на соответствующие документы.
2. Ссылки на используемые источники: по risc-v и elf.
Полезные ресурсы:
https://refspecs.linuxbase.org/elf/gabi4+/contents.html
https://msyksphinz-self.github.io/riscv-isadoc/html/rvi.htm
-
14 днів19 502 UAH14 днів19 502 UAH
Добрий день .
Є досвід написання ассеблерів і дизеблерів для різних архітектур.
-
100 днів365 664 UAH
221 6 1 100 днів365 664 UAHМогу с большой вероятностью успеха реализовать под Win32/64 некий аналог отладчика (по подобию windbg/ollydbg ) но для имитации пошаговой отладки (установки регистров в надлежащие значения) в приложений формата elf для конкретного процессора семейства RISC.
Именно имитации, т.к приложение наверняка использует не просто арифметику процессора а и взаимодействует с периферией, и полноценной отладкой это назвать будет нельзя.
Сходу без вникания не вполне понятно что значит "код чистый и аккуратный" т.к (субъективно) код должен быть в точности как в исполняемом файле (заменён по однозначному соответствию машинного кода на буквенный эквивалент)
Сумма и сроки очень приблизительные исходя из понимания как вышеописано, которое не полное, требует уточнений, а может и неверное.
Актуальні фриланс-проєкти в категорії Веб-програмування
Сервіс авто-покупки/продажу ключів TF2 (Аналог tf2-keys.com)Суть проекту: Автоматичний обмінник ключів TF2 (Mann Co. Supply Crate Key) на реальні гроші і назад. Логіка: Юзер платить рублі/крипту → бот кидає трейд у Steam. Або: юзер віддає ключі боту → сайт виплачує гроші на карту/крипту. Основні модулі: Авторизація: Вхід строго через… Веб-програмування, Розробка ботів ∙ 9 годин 24 хвилини тому ∙ 17 ставок |
Аудит, оновлення та оптимізація сайту Joomla 5.3.3
8000 UAH
Аудит, оновлення та оптимізація сайту Joomla 5.3.3. Потрібен спеціаліст з Joomla для комплексної перевірки, оновлення та налаштування сайту.Необхідно: Провести технічний аудит сайту на Joomla. Перевірити поточну версію CMS та за наявності новішої стабільної версії виконати… CMS, Веб-програмування ∙ 13 годин 6 хвилин тому ∙ 21 ставка |
Ищу программиста или вайб кодинг Автоматизация scraping данныхמחפש מתכנת או תומך בקידוד וייב. גירוד נתונים אוטומטי. https://drive.google.com/file/d/1Ogsx2iyahw79sleaDEUwMnSTPHhwF3Nu/view?usp=sharing HTML та CSS верстання, Веб-програмування ∙ 14 годин 11 хвилин тому ∙ 33 ставки |
Лендинг сайт з анкетою
6094 UAH
Створення сайту з анкетою Завдання 1. Заповнення анкети 2. Отримання результату у версії XLS / PDF Лаконічний дизайн Веб-програмування ∙ 17 годин 15 хвилин тому ∙ 128 ставок |
Створення дизайну Радіо ПРИВОЗ ФМ
7313 UAH
Створення унікального логотипу для РАДІО ПРИВОЗ ФМ В стилі як у вкладенні Додатково заглушка на сайт в стилі СКОРО ТУТ БУДЕ ЗВУЧАТИ РАДІО ПРИВОЗ ФМ з програшем цікавого треку Логотипи, Веб-програмування ∙ 17 годин 29 хвилин тому ∙ 43 ставки |