这段时间 tcp 本地lo 接口进程间通信 总是出现 tcp 三次握手 失败!! 同时前段时间驱动以及Tcp/ip 协议栈出现问题
那怎样调试呢?目前 一般都是ftrace kprobe
在使用kprobe 过程中发现,kprobe 是对每条指令都可以hook,如果hook 每个函数的时候, 想知道被hook的这个函数传入的参数 以及值,但是kprobe 没有明确说明其参数回放在那个位置!!
google 了一下 也就只有使用jprobe了!!!
使用例子可以参考:内核samples/kprobes 目录;
hook:ip_finish_output2 打印其堆栈以及skb 相关信息如下;
可知 syn报文发出后 进入协议栈lo 最后进入ip_finish_output逻辑, 发现其 不是按照自己改动后的协议栈逻辑走的!!
很快就找到了异常逻辑点! 分析其逻辑代码去!!!!!
PS:今天debug 应用层代码时, 发现一个宏 defined(__x86_64__) 对应x86_64 gcc 那么 arm -gcc 该使用什么宏表示呢?
: gcc -E -dM - </dev/null > filegcc
可以看到 gcc 中defined x86_64宏
所以要想知道arm-gcc里面使用那个宏表示arm64
可以执行:arm-linux-gcc -E -dM - </dev/null > arm-gcc-file