![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核
GlowChar
这个作者很懒,什么都没留下…
展开
-
内核怎么分配一段连续的内存区间
内核可以用kmalloc分配一段连续的内存空间,kmalloc的具体实现为:static __always_inline void *kmalloc(size_t size, gfp_t flags){ struct kmem_cache *cachep; void *ret; if (__builtin_constant_p(size)) { i...原创 2019-09-05 11:53:05 · 561 阅读 · 0 评论 -
虚拟化:gva、gpa、hva、hpa转化
gva -> gpa和hva -> hpa转化较为简单,分别去查guest和host页表即可。gpa -> hva:由于我所接触的虚拟化方式是采用qemu-kvm的方式。kvm负责cpu和内存的虚拟化,qemu负责io的虚拟化,且gpa->hva都是由qemu维护的,提供给kvm管理借口。具体代码实现见:kvm_pfn_t __gfn_to_pfn_memsl...原创 2019-09-06 14:28:08 · 7297 阅读 · 1 评论 -
程序代码段为只读属性,为什么还有自修改代码?
参考链接:https://blog.yanhao.org/?p=271我们都知道编译器会把程序的代码放在.text段,即代码段。这段地址是只读的,系统在加载的时候会把相应的代码数据附上只读属性,这样当相对其修改的时候就会引发例外。但是系统提供了mprotect系统调用,它可以修改内存的属性,自修改代码就是利用它来实现的。下面看一下mprotect传入的参数: SYSCALL_DEFINE...原创 2019-09-11 16:42:01 · 2342 阅读 · 1 评论