目前是直接使用systemp 工具 检查ip_output部分逻辑:简写代码如下所示
#! /usr/bin/env stap %{ #include <linux/in.h> #include <linux/inet.h> #include <net/inet_sock.h> #include <linux/string.h> #include <linux/errno.h> #include <linux/highmem.h> #include <linux/slab.h> #include <linux/socket.h> #include <linux/sockios.h> #include <linux/in.h> %} function get_sock_tproxy:long(sock:long) { sk = sock; val = @cast(sk, "inet_sock")->transparent; return val; } probe kernel.function("ip_finish_output2@net/ipv4/ip_output.c:282"){ tmpsk = $skb->sk; val = get_sock_tproxy(tmpsk) printf("%6d %16s %6d 0X%6x %16s -> %s tarnsp:%d ", uid(), execname(), pid(), tmpsk->sk_protocol, inet_get_ip_source(tmpsk), probefunc(), val) #printf("dump stack: %s ", print_backtrace()) }
编译方式:
stap -v -r /home/public/linux-4.4.131/ -a arm64 -B CROSS_COMPILE=aarch64-linux-gnu- -g -p 4 -m ip_out_fin.ko ./share/systemtap/examples/network/ip_finish_output2.stp
根据其skb相关值判断出问题
由于涉及公司相关信息 就简单的写一写了! 此文章只是为了展示处理问题的相关方法技巧
关于使用systemp hack malloc 以及free 晚点加上