摘要:
内核空间与用户空间的通信方式 下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象。 1.使用API:这是最常使用的一种方式了A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。C.Copy_from_user()/copy_... 阅读全文
摘要:
函数调用的细节实现这个问题当时感觉答得还可以,不过很多细节记不清晰了。所以下面反汇编一段小程序,进行分析,因为我比较熟悉的是arm汇编,所以我选择了一台安装了交叉工具链的ubuntu,而没有使用之前的centos。所以可能画风会有些不同。下图是我写了一个简单的程序和makefile。程序中是由main函数调用fun()函数。 编译程序,生成可执行文件,并对其进行反汇编,将反汇编之后的信息写入dum... 阅读全文
摘要:
Kmalloc申请的最大内存 以前虽然读过源码,但是对于它的申请上限确实没注意过。下面分析下,下面是kmalloc的源码。 可以看出,如果想知道kmalloc能申请的范围,需要跳转到文件中观察。下图便是包含的文件 可以看出,kmalloc一般情况下的上限是128K,但是如果打开了KMALLOC_MAX_SIZE这个宏,可以申请的内存会更大,如果想要知道上限的话,需要知道KMALLOC_MAX_S... 阅读全文
摘要:
如何在不重新编译内核,不rmmod内核模块的情况下修改系统调用为了解决这个问题,最终实现了两种解决方式:1.Linux系统调用劫持2.Kprobes内核调试技术(并非真正的修改)下面分别说下:Linux系统调用劫持:其实就是修改内核符号表,来达到一个劫持的作用。因为系统调用实际上是触发了一个0x80... 阅读全文
摘要:
一直想自己做一个最小系统,这次终于把想法付诸实现。 原理图如下: PCB图如下: 过了多日,板子终于邮到了,就是下面这个熊样。 焊接了稳压电路,发现稳压电路原理图部分画错,没有接地,然后飞了根线,稳压电路才稳稳的好用。 焊接stm32芯片的时候,其中VCC和GND引脚挂了锡,结果烧了一块稳压芯片,最 阅读全文