我制作了一个模块,我通过网络过滤器接收所有传入的数据包。我想在/ var / log / messages中打印数据(无标题)。我尝试了以下printk行,但没有打印出合适的消息。
struct sk_buff *sock_buff;
printk(KERN_INFO"user data :: %x",(sock_buff->data+sizeof(*sock_buff->network_header)+sizeof(*sock_buff->mac_header)) //though i want in character but i cant understand whats it printing not matching the hex of my data
printk(KERN_INFO"user data :: %s",(sock_buff->data+sizeof(*sock_buff->network_header)+sizeof(*sock_buff->mac_header))
我甚至使用过tail-sizeof(my_data);然后我也没有得到o / p。
答案 0 :(得分:2)
也许你忘了用指针(*)取值,试试这个
printk(KERN_INFO"user data :: %x",*(sock_buff->data+sizeof(*sock_buff->network_header) +sizeof(*sock_buff->mac_header));
据我所知,在你的结构数据字段中有一个指针类型。
typedef struct{
...
unsigned char* data;
...
} sk_buff;
同样%x特定者(十六进制数)需要数字agrument,而不是指针,这就是为什么你不应该忘记放一个小(*)
答案 1 :(得分:-1)
我不是内核黑客,但是查看skbuff.h头文件,它看起来sock_buff->data
或sock_buff->tail
中的一个指向标题后的数据。在这种情况下,printk(KERN_INFO"user data :: %s",sock_buff->data);
可能会成功。