Есть скомпилированный бинарный код
Есть адрес в памяти куда он грузится и откуда стартует
скажем .init : 0xc0008000 (кернел код)
Есть адреса и названия функций в этом коде
Нужно сделать полноценный ELF файл с нужными секциями для отладчика/дизасемблера. Не знаю как наверно через ассемблерный код с описанием секций но как вставить бинарный код вместо асм кода и где как указывать адрес загрузки адреса функций. Описание формата ELF смотрел, не помогло.
[решено] Как собрать ELF из бинарного кода?
Модератор: Модераторы разделов
-
- Сообщения: 1450
Re: [решено] Как собрать ELF из бинарного кода?
max100 писал(а): ↑05.08.2013 16:11Есть скомпилированный бинарный код
Есть адрес в памяти куда он грузится и откуда стартует
скажем .init : 0xc0008000 (кернел код)
Есть адреса и названия функций в этом коде
Нужно сделать полноценный ELF файл с нужными секциями для отладчика/дизасемблера. Не знаю как наверно через ассемблерный код с описанием секций но как вставить бинарный код вместо асм кода и где как указывать адрес загрузки адреса функций. Описание формата ELF смотрел, не помогло.
Дизассемблировать, а потом скомпилировать.
-
- Сообщения: 12
Re: [решено] Как собрать ELF из бинарного кода?
а. это не правильно
б. это не возможно
правильное решение явно есть
б. это не возможно
правильное решение явно есть
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: [решено] Как собрать ELF из бинарного кода?
Задача звучит как "Есть варённое мясо, как сделать из него борщ?". Скомпилированный во что? Если это машинный код, есть информация о выравнивании, наборе используемых инструкций и архитектуре, базовом адресе, относительно которого делаются переходы и нет ссылок на внешние символы, то можно разобраться со структурой раздела ELF, прикрутить к этому коду заголовки, а потом слинковать его с загрузчиком типа ld-linux.so, натравив на него ld.
Можно, в конце концов, сделать приложение, которое будет запускаться, загружать этот код в память по адресу 0xc0008000 и просто передать управление на начало этого кода. Что-то типа:
Код: Выделить всё
int f;
void *a;
f = open("binary", O_RDONLY);
a = mmap(0xc0008000, len, PROT_READ | PROT_EXEC, MAP_PRIVATE, f, 0);
__asm__ ("jmp <a>" ...)
Если же этот код ссылается на какие-то внешние функции, то нужно, после загрузки, настроить таблицу переходов, если она есть. Опять же, нужно знать во что этот код скомпилирован.
-
- Сообщения: 12
Re: [решено] Как собрать ELF из бинарного кода?
Я же написал - адрес в памяти известен. Код машинный, я думал это и так понятно.
В общем нашел я то что нужно
elf.asm
fasm /home/max100/elf.asm elf.o
мне запускать его не нужно, а лишь подготовить для objdump
Спасибо, это может пригодиться.
ps. или так, под gas
.text
.incbin "/home/max100/my.bin"
Ну я не программист, но вы то что как партизаны?
В общем нашел я то что нужно
elf.asm
Код: Выделить всё
format ELF
section '.text' executable
file '/home/max100/my.bin'
fasm /home/max100/elf.asm elf.o
мне запускать его не нужно, а лишь подготовить для objdump
Можно, в конце концов, сделать приложение, которое будет запускаться, загружать этот код в память по адресу 0xc0008000 и просто передать управление на начало этого кода.
Спасибо, это может пригодиться.
ps. или так, под gas
.text
.incbin "/home/max100/my.bin"
Ну я не программист, но вы то что как партизаны?
