Fix pushing argv onto stack from execve calls.

This commit is contained in:
Andrius Štikonas 2023-12-31 20:36:39 +00:00
parent db2d001395
commit 1cbca175a0
Signed by: andrius
GPG Key ID: 0C0331D5228A3B62
1 changed files with 6 additions and 6 deletions

View File

@ -84,7 +84,7 @@ void* entry_point(char* raw_elf)
return entry_point - base_address + raw_elf;
}
void jump(void* start_address, int argc, char** argv, char** envp)
void jump(void* start_address, int argc, int argc0, char** argv, char** envp)
{
current_process->stack = get_stack();
char* temp;
@ -93,9 +93,8 @@ void jump(void* start_address, int argc, char** argv, char** envp)
temp = *envp;
asm("push_rax");
}
asm("push !0");
unsigned i;
for (i = argc; i > 0; i -= 1) {
int i;
for (i = argc; i >= argc0; i -= 1) {
temp = argv[i];
asm("push_rax");
}
@ -199,7 +198,7 @@ int sys_execve(char* file_name, char** argv, char** envp, void, void, void)
int argc;
for(argc = 0; argv[argc] != 0; argc += 1) {}
jump(current_process->entry_point, argc, argv, envp);
jump(current_process->entry_point, argc, 0, argv, envp);
}
void sys_exit(unsigned value, void, void, void, void, void)
@ -391,7 +390,8 @@ int main(int argc, char** argv, char** envp)
wrmsrl(MSR_LSTAR, entry_syscall);
init_syscalls();
jump(current_process->entry_point, argc - 1, argv, envp);
int argc0 = 1; /* skip argv[0] since it contains the name of efi binary */
jump(current_process->entry_point, argc, argc0, argv, envp);
return 1;
}