Обратный поиск (Ctrl +R )для подстрок [дублировать]

Да,это возможно, но изменения размера и адресов раздела.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.

7
20.08.2020, 02:04
0 ответов

Теги

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