本人新手上路,想通过加日志的办法追踪一下socket发送数据的流程,
使用的是linux 5.4.100版本内核, ubuntu64位18.04版本 ,在协议栈
socket.c的sock_sendmsg函数中加入了一句strncpy或者使用strncmp系统直接崩溃起不来。
代码如下:
int sock_sendmsg(struct socket *sock, struct msghdr *msg)
{
int err;
char content[16] = {0};
strncpy(content, msg->msg_iter.kvec->iov_base, 9);
err = security_socket_sendmsg(sock, msg,
msg_data_left(msg));
return err ?: sock_sendmsg_nosec(sock, msg);
}
或者
if(!strncmp((char *)msg->msg_iter.kvec->iov_base, "mytest", strlen("mytest"))) {
printk("<=============okokok===================>");
}
编译和安装语句:
sudo rm arch/x86_64/boot/bzImage
sudo make -j4 bzImage
sudo make install
sudo update-grub
编译和安装内核有警告无错误,
然后sudo reboot
在网上找了一些方法也不管用,求指点。
我尝试只修改此处又是是OK的,代码如下:
int kernel_sendmsg(struct socket *sock, struct msghdr *msg,
struct kvec *vec, size_t num, size_t size)
{
printk("<======%s======>\n", vec->iov_base);
iov_iter_kvec(&msg->msg_iter, WRITE, vec, num, size);
return sock_sendmsg(sock, msg);
}
这里可以正常在日志中显示。