#define MSG_IMPLEMENTATION #define MSG_NO_MALLOC #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main(const struct rosetta_bootstrap *bs) { kern_logf("ld"); kern_handle_t task, address_space; task_self(&task); task_get_address_space(task, &address_space); for (size_t i = 0; i < bs->bs_argc; i++) { kern_logf("argv[%zu]: %s", i, bs->bs_argv[i]); } sys_remote_set(SYS_REMOTE_NSD, 0, 0); const char *path = "/usr/lib/libc.so"; int flags = 4; kern_logf("sending msg: open(%s, %d)", path, flags); int fd = open(path, flags); if (fd < 0) { kern_logf( "open(%s, %d) = %s (%s)", path, flags, strerror_code(fd), strerror(fd)); return -1; } kern_logf( "open(%s, %d) = %s (%s)", path, flags, strerror_code(SUCCESS), strerror(SUCCESS)); unsigned char buf[32] = {0}; int nr = read(fd, buf, sizeof buf); if (nr < 0) { kern_logf("read call failed (%s)", strerror(nr)); return -1; } kern_logf("data: %x %c %c %c", buf[0], buf[1], buf[2], buf[3]); void *p = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (p != MAP_FAILED) { memset(p, 0x0, 0x1000); kern_logf("mmap'd buffer at %p", p); } else { kern_logf("mmap buffer failed"); } void *lib = mmap(NULL, 0x1000, PROT_READ | PROT_EXEC, MAP_PRIVATE, fd, 0); if (lib != MAP_FAILED) { kern_logf("mmap'd %s at %p", path, lib); unsigned char *tmp = lib; kern_logf("data: %x %c %c %c", tmp[0], tmp[1], tmp[2], tmp[3]); } else { kern_logf("mmap lib failed"); } kern_logf("ld finished"); return 0; }