int main(int argc, char * argv[]) { if (argc < 2) { fprintf(stderr, "Usage: %s <modulepath>\n", argv[0]); return 1; } return syscall_system_function(8, &argv[1]); }
static uintptr_t object_load(elf_t * object, uintptr_t base) { uintptr_t end_addr = 0x0; object->base = base; /* Load object */ { size_t headers = 0; while (headers < object->header.e_phnum) { Elf32_Phdr phdr; fseek(object->file, object->header.e_phoff + object->header.e_phentsize * headers, SEEK_SET); fread(&phdr, object->header.e_phentsize, 1, object->file); switch (phdr.p_type) { case PT_LOAD: { char * args[] = {(char *)(base + phdr.p_vaddr), (char *)phdr.p_memsz}; syscall_system_function(10, args); fseek(object->file, phdr.p_offset, SEEK_SET); fread((void *)(base + phdr.p_vaddr), phdr.p_filesz, 1, object->file); size_t r = phdr.p_filesz; while (r < phdr.p_memsz) { *(char *)(phdr.p_vaddr + base + r) = 0; r++; } if (end_addr < phdr.p_vaddr + base + phdr.p_memsz) { end_addr = phdr.p_vaddr + base + phdr.p_memsz; } } break; case PT_DYNAMIC: { object->dynamic = (Elf32_Dyn *)(base + phdr.p_vaddr); } break; default: break; } headers++; } } return end_addr; }
extern int sysfunc(int command, char ** args) { __sets_errno(syscall_system_function(command, args)); }
int main(int argc, char ** argv) { if (argc < 2) return 1; return syscall_system_function(atoi(argv[1]), &argv[2]); }
int main(int argc, char * argv[]) { int x[] = {0xFF,0xFF}; return syscall_system_function(13, (char **)x); }