Repack образ файловой системы из vmlinux. bin (embedded initramfs) без пересборки?

Вы можете сделать это sed - только, без тестов оболочки и еще много чего:

sed '1{/^ASDF$/{$q;d;};}' infile
7
12.02.2017, 21:39
2 ответа

Как упоминалось в ответе на аналогичный вопрос о замене разделов ELF, обсуждаемый на reverseengineering.se, простое использование dd может быть достаточным при некоторых обстоятельствах, за исключением того, что новый архив не является большим , например есть ли переезды.

1
27.01.2020, 20:19

Да,это возможно, но изменения размера и адресов раздела.init.ramfs недостаточно, поскольку исполняемый файл ELF ядра статически связан с виртуальным адресом начала и конца раздела initramfs.

В исходниках Linux соответствующий код находится в исходном файле iniramfs.c:

void __init populate_rootfs(void)
{
  char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start, 0); 
...
}

Так что вам также нужно изменить эти два смещения в машинном коде вызова функции unpack _на _rootfs (), которая находится в секции.init.text. (следите за любыми соответствующими записями в таблице перемещений!...если таковой существует)

Кроме того, со ссылкой на ответ Icarus, манипулирование размером раздела initramfs, смещением файла и начальным виртуальным адресом, а также этими двумя вышеупомянутыми смещениями (аргументы для распаковки _в _rootfs Функция ())позволяет вам добавить свой собственный БОЛЬШОЙ раздел initramfs, который загружается ВЫШЕ максимального виртуального адреса файла ELF. Поле «Размер памяти» (PHeader )заголовка программы также необходимо изменить, чтобы отразить больший раздел initramfs, добавленный после конца старого виртуального адресного пространства.

П.С. «Дыра» в виртуальном адресном пространстве ядра, оставшаяся после перемещения исходного раздела init.ramfs на новый старший виртуальный адрес, ничему не мешает, потому что соответствующая память позже освобождается свободной _initmem (void )функция, определенная в исходном файле init.c.

2
27.01.2020, 20:19

Теги

Похожие вопросы