diff --git a/bin/ls/Makefile b/bin/ls/Makefile index 53379b1..35158ab 100644 --- a/bin/ls/Makefile +++ b/bin/ls/Makefile @@ -17,7 +17,7 @@ #Objects OBJS = main.o -LIBRARIES = ../../build/lib/libc_old.so +#LIBRARIES = ../../build/lib/libc_old.so # Link The Binary $(BINARY) : $(OBJS) diff --git a/bin/ls/main.c b/bin/ls/main.c index 1574b9f..4650cb0 100644 --- a/bin/ls/main.c +++ b/bin/ls/main.c @@ -58,6 +58,9 @@ FILE *fd; struct directoryEntry *dirEntry = 0x0; + printf("argc: %i - %i\n", argc, argv[0]); + exit(0); + pwd = (char *)malloc(256); permsData = (char *)malloc(13); diff --git a/lib/csu/crt1.c b/lib/csu/crt1.c index 6cdb2a8..c412255 100644 --- a/lib/csu/crt1.c +++ b/lib/csu/crt1.c @@ -43,7 +43,7 @@ extern void _fini(void); extern void _init(void); extern int main(int, char **, char **); -extern void _start(char *, ...); +extern void _start(unsigned int *, ...); #ifdef GCRT extern void _mcleanup(void); @@ -70,7 +70,7 @@ /* The entry function. */ void -_start(char *ap, ...) +_start(unsigned int *ap, ...) { fptr cleanup; int argc; @@ -82,8 +82,9 @@ __asm__("and $0xfffffff0,%esp"); #endif cleanup = get_rtld_cleanup(); - argv = ≈ - argc = *(long *)(void *)(argv - 1); + //argv = ≈ + argc = *ap++;// *(long *)(void *)(argv - 1); + argv = (char **)ap; env = argv + argc + 1; environ = env; diff --git a/lib/ubix/sstart.c b/lib/ubix/sstart.c index 0b944eb..6ab626f 100644 --- a/lib/ubix/sstart.c +++ b/lib/ubix/sstart.c @@ -1,20 +1,24 @@ char **environ; const char *__progname = ""; -void _start(char *ap, ...) { +void _start(unsigned int *ap, ...) { int argc; char **argv; char **env; const char *s; - argv = ≈ - - argc = *(long *)(void *)(argv - 1); - env = argv + argc + 1; + //argv = ≈ + //argc = *(long *)(void *)(argv - 1); + //argc = *(long *)(void *)(argv - 1); +printf("0x%X}}", ap); + argc = *ap++; + argv = (char **)ap; + ap += argc + 1; + env = (char **)ap; environ = env; - if (env[0] != 0) - printf("env[0]: 0x%X\n",env[0]); +// if (env[0] != 0) + // printf("env[0]: 0x%X\n",env[0]); /* printf("(&ap: 0x%X)\n",&ap); @@ -22,12 +26,14 @@ printf("(argv[-1]: 0x%X:0x%X)\n",argv[-1],*(argv - 1)); */ +/* if (argc > 0 && argv[0] != 0x0) { __progname = argv[0]; for (s = __progname; *s != '\0'; s++) if (*s == '/') __progname = s + 1; } +*/ exit(main(argc, argv, env)); diff --git a/lib/ubix/startup.S b/lib/ubix/startup.S index 107e9f4..f771e22 100644 --- a/lib/ubix/startup.S +++ b/lib/ubix/startup.S @@ -36,8 +36,10 @@ sub $0x8,%esp add $0xfffffff4,%esp add $0xfffffff8,%esp - pushl 0xc(%ebp) +// pushl 0xc(%ebp) +// pushl 0x8(%ebp) pushl 0x8(%ebp) + pushl 0x4(%ebp) call main push %eax call exit diff --git a/sys/i386/i386_exec.c b/sys/i386/i386_exec.c index b7c8308..7f79293 100644 --- a/sys/i386/i386_exec.c +++ b/sys/i386/i386_exec.c @@ -630,32 +630,36 @@ //kprintf( "EBP-1(%i): EBP: [0x%X], EIP: [0x%X], ESP: [0x%X]\n", _current->id, iFrame->ebp, iFrame->eip, iFrame->user_esp ); + argc = 1; + iFrame->ebp = STACK_ADDR; iFrame->eip = binaryHeader->eEntry; - iFrame->user_esp = ((uint32_t) STACK_ADDR) - (sizeof(uint32_t) * (argc + 3)); + iFrame->user_esp = ((uint32_t) STACK_ADDR) - (sizeof(uint32_t) * (argc + 5)); tmp = (void *) iFrame->user_esp; //MrOlsen 2017-11-14 iFrame->user_ebp; + *tmp++ = 0x0; + *tmp++ = tmp + 1; //kprintf( "STACK: 0x%X, ESP0: 0x%X\n", iFrame->user_esp, _current->tss.esp0 ); //! build argc and argv[] -/*MrOlsen Did I Fuck Up Stack? - *tmp-- = argc; + *tmp++ = argc; //kprintf( "xSTACK: 0x%X, ESP0: 0x%X\n", iFrame->user_esp, _current->tss.esp0 ); if ( argc == 1 ) { - *tmp-- = 0x0; + *tmp++ = 0x0; } else { for ( i = 0; i < argc; i++ ) { - *tmp-- = (u_int) argv[i]; + *tmp++ = (u_int) argv[i]; } } - *tmp-- = 0x0; // ARGV Terminator - *tmp-- = 0x0; // ENV Terminator + *tmp++ = 0x0; // ARGV Terminator + *tmp++ = 0x0; // ENV Terminator +/* */ /*