#include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/un.h> void main() { int mysock = socket(PF_FILE, SOCK_STREAM, 0); struct sockaddr_un name; size_t size; int nbytes; name.sun_family = AF_FILE; strcpy (name.sun_path, "/mnt/initfs/tmp/dsmesock"); size = (offsetof (struct sockaddr_un, sun_path) + strlen (name.sun_path) + 1); if (connect (mysock, (struct sockaddr *) &name, size) < 0) { printf("Error opening socket.\n"); } else { nbytes = write (mysock, "\f\0\0\0\211\2\0\0d\0\0\0", 12); if (nbytes < 0) { printf("Write error.\n"); exit(1); } shutdown(mysock,2); } }
Nezumi:~# strace -f ./testdsme execve("./testdsme", ["./testdsme"], [/* 59 vars */]) = 0 brk(0) = 0x11000 uname({sys="Linux", node="Nezumi", ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40000000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=31704, ...}) = 0 mmap2(NULL, 31704, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40004000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\324\302"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1086428, ...}) = 0 mmap2(0x41028000, 1118708, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x41028000 mprotect(0x4112c000, 32768, PROT_NONE) = 0 mmap2(0x41134000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x104) = 0x41134000 mmap2(0x41137000, 8692, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x41137000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4000c000 syscall_983045(0x4000c4a0, 0x4000c4a0, 0x41023048, 0x4000cb78, 0x40, 0, 0x48, 0xf0005, 0, 0, 0x41023000, 0xbee853d4, 0, 0xbee85050, 0xfffffff8, 0x41000ad0, 0x20000010, 0x4000c4a0, 0xd02c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) = 0 mprotect(0x41134000, 4096, PROT_READ) = 0 munmap(0x40004000, 31704) = 0 mq_notify(1, ptrace: umoven: Input/output error {...}) = 3 SYS_283(0x3, 0xbee854d8, 0x1b, 0xbee854d8, 0x41022db8) = 0 write(3, "\f\0\0\0\211\2\0\2\0\0\0\0", 12) = 12 SYS_293(0x3, 0x2, 0xc, 0xc, 0x41022db8) = 0 io_submit(0, 0, 0 <unfinished ... exit status 0> Process 3339 detached