我正在尝试在内核空间中打印用户空间缓冲区的内容,但是我得到了一些垃圾字符,我不确定我哪里出错了。
SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
unsigned, flags, struct sockaddr __user *, addr,
int, addr_len) {
char *messageRead = kmalloc(len,GFP_KERNEL);
unsigned long bytesNotCopied = copy_from_user(messageRead,(char*)buff,len);
printk("The messageRead Read is %s \n",messageRead);
.....
.....
}
bytesNotCopied返回0,因此我能够确认内容已被复制。但是当我尝试打印messageRead值时,它会返回一些垃圾值。
答案 0 :(得分:0)
返回值0表示复制成功。 为什么要将缓冲区打印为字符串,即在printk()中使用%s。 buff是用户进程中的字符串吗?如果没有尝试倾倒这种方式
def make_id():
return base64.b64encode(uuid.uuid4().bytes).decode("utf-8")