Необходимо написать программу-транслятор (дизассемблер)
Необходимо написать программу-транслятор (дизассемблер), с
помощью которой можно преобразовывать машинный код (извлеченный из
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 dni1600 PLN14 dni1600 PLN
Dzień dobry .
Istnieje doświadczenie w pisaniu asseblerów i disseblerów dla różnych architektur.
-
100 dni30 000 PLN
221 6 1 100 dni30 000 PLNМогу с большой вероятностью успеха реализовать под Win32/64 некий аналог отладчика (по подобию windbg/ollydbg ) но для имитации пошаговой отладки (установки регистров в надлежащие значения) в приложений формата elf для конкретного процессора семейства RISC.
Именно имитации, т.к приложение наверняка использует не просто арифметику процессора а и взаимодействует с периферией, и полноценной отладкой это назвать будет нельзя.
Сходу без вникания не вполне понятно что значит "код чистый и аккуратный" т.к (субъективно) код должен быть в точности как в исполняемом файле (заменён по однозначному соответствию машинного кода на буквенный эквивалент)
Сумма и сроки очень приблизительные исходя из понимания как вышеописано, которое не полное, требует уточнений, а может и неверное.
Aktualne zlecenia dla freelancerów w kategorii Aplikacje desktopowe
Modyfikacja w pracy emulatora
165 PLN
Witaj. Ściągnąłem z Internetu emulator automatu do gier gaminator cf final. Bardzo mi się podoba, ale są tam niedociągnięcia. Jest panel administracyjny, ale otwiera się swobodnie, a nie zamyka w ogóle. Zamyka się tylko razem z aplikacją. A dane po zmianach w panelu… Aplikacje desktopowe ∙ 2 dni 18 godzin temu ∙ 10 ofert |
Opracowanie niestandardowego oprogramowania (aplikacja na Androida + CMS) dla kiosków samoobsługowych SUNMI K2 (fast food)
83 PLN
Szukamy doświadczonego zespołu lub programisty Android na poziomie średnim/zaawansowanym (możliwe, że z umiejętnościami Full-stack) do stworzenia własnego oprogramowania dla kiosków samoobsługowych sieci fast food. Obecnie nasze terminale działają na bazie gotowego chmurowego… Content Management Systems, Aplikacje desktopowe ∙ 7 dni 13 godzin temu ∙ 23 oferty |
Należy przeprowadzić migrację obecnego programu roboczego z foxpro na C#Cześć wszystkim! Mamy program na foxpro (ma kilka modułów, program do ewidencji), mamy źródła programu, w razie pilnej potrzeby można skonsultować się z osobami zajmującymi się wsparciem bieżącego programu. Co należy zrobić: 1. Analiza, co i jak działa, sporządzenie listy… C#, Aplikacje desktopowe ∙ 12 dni 21 godzin temu ∙ 19 ofert |