10 extern int giSyscall_ClientID;
13 void CallUser(void *Entry, int argc, char *argv[], char **envp) __attribute__((noreturn));
16 int main(int argc, char *argv[], char **envp)
22 int (*appMain)(int, char *[], char **);
25 // int syscall_handle = -1;
27 for( i = 1; i < argc; i ++ )
29 if(strcmp(argv[i], "--key") == 0) {
30 giSyscall_ClientID = atoi(argv[++i]);
34 if(strcmp(argv[i], "--binary") == 0) {
39 if(strcmp(argv[i], "--open") == 0) {
40 if( acess_open(argv[++i], 6) == -1 ) { // Read/Write
41 fprintf(stderr, "Unable to open '%s'\n", argv[i]);
47 if( argv[i][0] != '-' ) break;
52 "Usage: ld-acess <executable> [arguments ...]\n"
54 "--key\t(internal) used to pass the system call handle when run with execve\n"
55 "--binary\tLoad a local binary directly\n"
56 "--open\tOpen a file before executing\n"
67 // printf("Exectutable Path: '%s'\n", appPath);
68 // printf("Executable argc = %i\n", appArgc);
70 base = Binary_Load(appPath, (uintptr_t*)&appMain);
71 printf("[DEBUG %i] base = %p\n", giSyscall_ClientID, base);
72 if( !base ) return 127;
74 printf("==============================\n");
75 printf("[DEBUG %i] %i %p ", giSyscall_ClientID, appArgc, appArgv);
76 for(i = 0; i < appArgc; i ++)
77 printf("\"%s\" ", appArgv[i]);
79 printf("[DEBUG %i] appMain = %p\n", giSyscall_ClientID, appMain);
81 __asm__ __volatile__ (
86 : : "r" (envp), "r" (appArgv), "r" (appArgc), "r" (appMain) );
89 CallUser(appMain, appArgc, appArgv, envp);
91 return appMain(appArgc, appArgv, NULL);
95 void CallUser(void *Entry, int argc, char *argv[], char **envp)
97 __asm__ __volatile__ (
100 : : "r" (Entry), "r" (&argc)
105 void Warning(const char *Format, ...)
108 printf("[WARN %i] ", giSyscall_ClientID);
109 va_start(args, Format);
110 vprintf(Format, args);
115 void Notice(const char *Format, ...)
118 printf("[NOTICE %i] ", giSyscall_ClientID);
119 va_start(args, Format);
120 vprintf(Format, args);
125 void Debug(const char *Format, ...)
128 printf("[DEBUG %i] ", giSyscall_ClientID);
129 va_start(args, Format);
130 vprintf(Format, args);