- 博客(3)
- 收藏
- 关注
原创 程序代码段为只读属性,为什么还有自修改代码?
参考链接:https://blog.yanhao.org/?p=271我们都知道编译器会把程序的代码放在.text段,即代码段。这段地址是只读的,系统在加载的时候会把相应的代码数据附上只读属性,这样当相对其修改的时候就会引发例外。但是系统提供了mprotect系统调用,它可以修改内存的属性,自修改代码就是利用它来实现的。下面看一下mprotect传入的参数: SYSCALL_DEFINE...
2019-09-11 16:42:01 2412 1
原创 虚拟化: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 7446 1
原创 内核怎么分配一段连续的内存区间
内核可以用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 569
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人