linux内核printk %p 地址打印问题
printk 使用 %p 打印的地址和你预想的不一样???在linux内核中,直接使用%p打印出的地址时经过哈希运算的,为了防止直接暴露内核地址为攻击者提供了有关内核布局的敏感信息。要打印内核的虚拟地址,可以使用 %pK。详细讲解请参考:linux printk https://lishiwen4.github.io/linux-kernel/printk...
·
printk 使用 %p 打印的地址和你预想的不一样???
在linux内核中,直接使用%p打印出的地址时经过哈希运算的,为了防止直接暴露内核地址为攻击者提供了有关内核布局的敏感信息。
要打印内核的虚拟地址,可使用 %pK。
在Ubuntu中 /proc/sys/kernel/kptr_restrict 的值为1,可以用%pK打印内核中的运算的地址,
eg:
static char n = 5;
char *recv_addr = &n;
printk("recv_addr: %pK\n", recv_addr);
printk("recv_addr+1: %pK \n", recv_addr+1 );
printk("recv_addr+2: %pK \n", recv_addr+2 );
打印结果为:
[30409.301617] recv_addr: ffffffffc05e7000
[30409.301618] recv_addr+1: ffffffffc05e7001
[30409.301618] recv_addr+2: ffffffffc05e7002
详细讲解请参考:
https://lwn.net/Articles/737451/
https://blog.csdn.net/flyingnosky/article/details/97407811
更多推荐
已为社区贡献1条内容
所有评论(0)