В настоящее время я играю с сборкой ARM на Linux в качестве учебного упражнения. Я использую "голую" сборку, т.е. Libcrt или libgcc. Может ли кто-нибудь указать мне информацию о том, в каком штате указатель стека и другие регистры будут в начале программы до вызова первой команды? Очевидно, pc/r15 указывает на _start, а остальные, по-видимому, инициализируются 0, за двумя исключениями; sp/r13 указывает на адрес, расположенный далеко за пределами моей программы, а r1 указывает на несколько более высокий адрес.
Итак, для некоторых твердых вопросов:
- Каково значение в r1?
- Является ли значение в sp законным стеком, выделенным ядром?
- Если нет, то какой предпочтительный метод распределения стека; используя brk или выделите статический раздел .bss?
Любые указатели будут оценены.