запуске ядра?:
init:
cli /* Выключаем ВСЕ прерывания */
push %eax /* Заталкиваем в стек */
push %ebx /* регистры общего назначения */
call main /* вызываем main */
hlt /* Останавливаем процессор */
loop: /* Переходим в бесконечный цикл */
jmp loop
потому что есть правила вызова
calling convention?
да, я советую взять нормальный манул с осдев вики
Еще моментик не подскажите, нашел манул на осдев(https://wiki.osdev.org/Bare_Bones), там инициализации bss идет прям в asm: .section .bss .align 16 stack_bottom: .skip 16384 # 16 KiB stack_top: А разве этим не может линкер заняться?
может, но тебе надо будет очень хорошо понимать как это будет работать
Чтобы передать аргументы в main
Может, если не пользоваться всяким асмом. Ну и стек в бсс засовывать очень хреновая идея в принципе.
если у тебя сырой бинарник, bss секция в нём может полностью отсутствовать и обычно в них её размер нигде не указан, потому инициализацию bss оставляют на код бинарника, ибо ему лучше известно
в сыром бинарнике, да, а вот если уже не сырой, а elf то стек можно заранее выделить пустым сегментом
Почему может перетереть?
Обсуждают сегодня