Fix pushing argv onto stack from execve calls.
This commit is contained in:
parent
db2d001395
commit
1cbca175a0
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue