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; 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(); current_process->stack = get_stack();
char* temp; char* temp;
@ -93,9 +93,8 @@ void jump(void* start_address, int argc, char** argv, char** envp)
temp = *envp; temp = *envp;
asm("push_rax"); asm("push_rax");
} }
asm("push !0"); int i;
unsigned i; for (i = argc; i >= argc0; i -= 1) {
for (i = argc; i > 0; i -= 1) {
temp = argv[i]; temp = argv[i];
asm("push_rax"); asm("push_rax");
} }
@ -199,7 +198,7 @@ int sys_execve(char* file_name, char** argv, char** envp, void, void, void)
int argc; int argc;
for(argc = 0; argv[argc] != 0; argc += 1) {} 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) 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); wrmsrl(MSR_LSTAR, entry_syscall);
init_syscalls(); 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; return 1;
} }