Название main()
было выбрано просто для знакомства и эстетических соображений; его не вызывала среда выполнения C, как в случае с main()
из пользовательской программы. Есть даже комментарий, который говорит об этом вinit/main.c
:
void main(void) /* This really IS void, no error here. */
Функция main()
вызывается изboot/head.s
:
after_page_tables:
pushl $0 # These are the parameters to main :-)
pushl $0
pushl $0
pushl $L6 # return address for main, if it decides to.
pushl $_main
jmp setup_paging
L6:
jmp L6 # main should never return here, but
# just in case, we know what happens
Обратите внимание, что адрес main
помещается в стек, а setup_paging
вызывается с jmp
, а не с call
, что означает, что ret
в конце будет продолжаться с начала main()
.
В качестве обходного пути, поскольку вы не используете хост -только для сети, я предлагаю вам удалить vboxnet0
из сетевых настроек VBox. Таким образом, он не будет доступен, и ваша проблема будет решена.
Вы можете удалить его через Файл -> Диспетчер сети хоста -> Удалить .