У меня есть вопрос о поведении сценария компоновщика, найденный в этом вопросе:
https://stackoverflow.com/a/55193198/2421349
Чтобы сохранить ваш клик, соответствующая часть:
OUTPUT_ARCH(riscv)
MEMORY
{
/* qemu-system-risc64 virt machine */
RAM (rwx) : ORIGIN = 0x80000000, LENGTH = 128M
}
ENTRY(_start)
И в следующем разделе:
PROVIDE (__executable_start = SEGMENT_START("text-segment", ORIGIN(RAM)));
. = SEGMENT_START("text-segment", ORIGIN(RAM)) + SIZEOF_HEADERS;
PROVIDE(__stack_top = ORIGIN(RAM) + LENGTH(RAM));
Мы устанавливаем __executable_start
, чтобы начать с ORIGIN(RAM)
.Затем мы используем команду .
, чтобы переместить расположение вывода компоновщика на SIZEOF_HEADERS
байтов вперед.И, наконец, мы устанавливаем __stack_top = ORIGIN(RAM) + LENGTH(RAM)
.
Предполагая, что стек увеличивается в направлении ORIGIN(RAM)
, не будет ли он в конечном итоге перезаписать __executable_start
, и каков будет SIZEOF_HEADERS
, если стек станет достаточно большим?