我做了一个模块,我在其中通过网络过滤器接收所有传入的数据包。我想打印/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))
我什至使用了尾巴 - sizeof(my_data); 然后我也没有得到想要的O/P。
也许你忘记用指针(*)取一个值,试试这个
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 指定器(十六进制数字)需要数字相加,而不是指针,这就是为什么您不应该忘记放置一个小 (*)
我不是内核黑客,但查看 skbuff.h 头文件,在我看来,sock_buff->data
或sock_buff->tail
中的一个指向标头后的数据。在这种情况下,printk(KERN_INFO"user data :: %s",sock_buff->data);
可能会解决问题。