
Сообщение от
SfS
Загружается шелл через раз. Иногда почемуто пишет "login incorrect".
Кажется я нашёл, почему. В библиотеке crt.s весьма странно запускает процедуру main. Нафига подменять адрес возврата, да ещё выше аргументов - непонятно. Я сделал стандартно:
Код:
pop hl ; environ
ld (_environ), hl
call _main
jp _exit
Тут кстати видно, что из стека достаётся адрес переменных среды, однако в syscall_exec.c для нового процесса в стек кладётся только argc,argv. Я добавил ещё и их:
Код:
// Shove argc and the address of argv just below envp
uputw((uint16_t) nargv, nenvp - 1);
uputw((uint16_t) argc, nenvp - 2);
uputw((uint16_t) nenvp, nenvp - 3);
// Set stack pointer for the program
udata.u_isp = nenvp - 3;
После этих изменений логин у меня работает как и задумывалось.
---------- Post added at 20:41 ---------- Previous post was at 20:38 ----------
Вот только рожица всё ещё появляется
А если не появляется - всё опять рушится...
---------- Post added at 21:13 ---------- Previous post was at 20:41 ----------
Можно и не менять syscall_exec.c, только адрес переменных вот так считать:
Код:
ld hl, #4 ; environ
add hl,sp
ld (_environ), hl
call _main
jp _exit