From 3c9de865d17d1d6c2a7651eed0644d607b025729 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 9 Apr 2015 19:49:35 +0200 Subject: [PATCH] s2i_dump improvements --- Makefile | 22 ++-------------------- tools/s2i-dump.sh | 22 +++++++++++++++++----- tools/syscall-dump.c | 23 +++++++++++++++++++++++ 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index de62228e..0fb2668a 100644 --- a/Makefile +++ b/Makefile @@ -175,27 +175,9 @@ tools/syscall-dump.so.$(HOST_ARCH): tools/syscall-dump.c .PHONY: s2i_dump s2i_dump: tools/syscall-dump.so if test -z "$(SATIP_HOST)"; then echo "Define SATIP_HOST variable"; exit 1; fi - scp tools/syscall-dump.so \ - tools/s2i-dump.sh \ - firmware/initramfs/root/s2i.bin \ - firmware/initramfs/usr/lib/libuuid.so.1 \ - firmware/initramfs/usr/lib/libcurl.so.4 \ - firmware/initramfs/usr/lib/liboauth.so.0 \ - firmware/initramfs/usr/lib/libsoup-2.4.so.1 \ - firmware/initramfs/usr/lib/libgio-2.0.so.0 \ - firmware/initramfs/usr/lib/libgobject-2.0.so.0 \ - firmware/initramfs/usr/lib/libgmodule-2.0.so.0 \ - firmware/initramfs/usr/lib/libgthread-2.0.so.0 \ - firmware/initramfs/usr/lib/libssl.so.1.0.0 \ - firmware/initramfs/usr/lib/libcrypto.so.1.0.0 \ - firmware/initramfs/usr/lib/libxml2.so.2 \ - root@$(SATIP_HOST):/usr/lib - scp firmware/initramfs/root/default_sl.json \ - firmware/initramfs/root/*.txt \ - firmware/initramfs/root/*.m3u \ + cd firmware/initramfs && tar cvzf ../fw.tgz --owner=root --group=root * + scp tools/syscall-dump.so tools/s2i-dump.sh firmware/fw.tgz \ root@$(SATIP_HOST):/root - scp firmware/initramfs/usr/local/bin/mdnsd root@$(SATIP_HOST):/usr/bin - scp $(TOOLCHAIN)/target/bin/netstat root@$(SATIP_HOST):/bin # # minisatip diff --git a/tools/s2i-dump.sh b/tools/s2i-dump.sh index 9b322265..a0a418d5 100755 --- a/tools/s2i-dump.sh +++ b/tools/s2i-dump.sh @@ -1,5 +1,18 @@ #!/bin/sh +if test -r /root/fw.tgz; then + if ! test -d /1; then + mkdir /1 + fi + cd /1 + tar xvzf /root/fw.tgz + mount --bind /dev /1/dev + mount --bind /proc /1/proc + cp -av /root/syscall-dump.so /1/usr/lib + cp -av /root/s2i-dump.sh /1 + cp -av /usr/bin/strace /1/usr/bin + exit 0 +fi if ! test -d /mnt/s2i-log; then mkdir -p /mnt/s2i-log mount -t tmpfs -o size=300M,mode=0755 tmpfs /mnt/s2i-log @@ -8,10 +21,9 @@ if ! test -d /mnt/ramdisk; then mkdir -p /mnt/ramdisk mount -t tmpfs -o size=1024k,mode=0755 tmpfs /mnt/ramdisk fi -mkdir -p /usr/local/bin -mkdir -p /var/run -ln -sf /usr/bin/mdnsd /usr/local/bin/mdnsd -rm -f /mnt/s2i-log/s2i.log +killall -9 mdnsd +rm -f /mnt/s2i-log/* +#TRACE="strace -r -ff -o /mnt/s2i-log/trace" LD_PRELOAD=/usr/lib/syscall-dump.so \ SYSCALL_DUMP_LOG=/mnt/s2i-log/s2i.log \ -/usr/lib/s2i.bin +$TRACE /root/s2i.bin diff --git a/tools/syscall-dump.c b/tools/syscall-dump.c index 95feac2b..8ef68e2a 100644 --- a/tools/syscall-dump.c +++ b/tools/syscall-dump.c @@ -15,8 +15,11 @@ Usage: #include #include #include +#include +#include #include #include +#include #include #include #include @@ -56,6 +59,7 @@ static int (*real_close)(int fd); static int (*real_dup)(int oldfd); static int (*real_dup2)(int oldfd, int newfd); static int (*real_eventfd)(unsigned int initval, int flags); +static int (*real_bind)(int socket, const struct sockaddr *address, socklen_t address_len); static int (*real_system)(const char *command); static FILE *(*real_fopen)(const char *pathname, const char *mode); static FILE *(*real_freopen)(const char *pathname, const char *mode, FILE *stream); @@ -395,6 +399,25 @@ int eventfd(unsigned int initval, int flags) return r; } +/* bind() wrapper */ +int bind(int socket, const struct sockaddr *address, socklen_t address_len) +{ + int r; + char s[32]; + + REDIR(real_bind, "bind"); + + if (address->sa_family == AF_UNIX) + dlog("bind AF_UNIX to '%s'\n", ((struct sockaddr_un *)address)->sun_path); + else if (address->sa_family == AF_INET) + dlog("bind AF_INET to '%s:%d'\n", inet_ntop(AF_INET, &(((struct sockaddr_in*)address)->sin_addr), s, sizeof(s)), ((struct sockaddr_in *)address)->sin_port); + else if (address->sa_family == AF_INET6) + dlog("bind AF_INET to '%s:%d'\n", inet_ntop(AF_INET6, &(((struct sockaddr_in6*)address)->sin6_addr), s, sizeof(s)), ((struct sockaddr_in6 *)address)->sin6_port); + r = real_bind(socket, address, address_len); + dlog("bind(%d, %p, %zi) = %d (%d)\n", socket, address, (size_t)address_len, r, E(r)); + return r; +} + /* system() wrapper */ int system(const char *command) {