摘要: 线程安全终止 取消一个线程的方式是向其发送pthread_cancel信号。目标线程接收到这个信号之后会采取动作,具体的动作取决于线程开始时以下几个函数的设定: 1)Int pthread_setcancelstate(int state,int * oldstate); 这个函数用来设定本线程对cancel信号反应,state有两种值:PTHREAD_CANCEL_ENABLE。分别表示收到信... 阅读全文
posted @ 2015-12-13 21:24 DChipNau 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 申请内存的函数有哪些,以及其特点其实总结起来,申请内存的函数主要有kmalloc,vmalloc,__get_free_page,malloc函数族,alloca。下面分别介绍:1. vmalloc:内核态的内存申请函数,也是基于slab机制。申请的物理内存并不连续,速度相比于kmalloc要慢。用于申请大块内存。其分配的内存在内核空间中的动态映射区。Vmalloc能分配的内存较大,可以通过命令“... 阅读全文
posted @ 2015-12-13 21:16 DChipNau 阅读(2054) 评论(0) 推荐(0) 编辑
摘要: 内核空间与用户空间的通信方式 下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象。 1.使用API:这是最常使用的一种方式了A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。C.Copy_from_user()/copy_... 阅读全文
posted @ 2015-12-13 21:15 DChipNau 阅读(18819) 评论(0) 推荐(5) 编辑
摘要: 函数调用的细节实现这个问题当时感觉答得还可以,不过很多细节记不清晰了。所以下面反汇编一段小程序,进行分析,因为我比较熟悉的是arm汇编,所以我选择了一台安装了交叉工具链的ubuntu,而没有使用之前的centos。所以可能画风会有些不同。下图是我写了一个简单的程序和makefile。程序中是由main函数调用fun()函数。 编译程序,生成可执行文件,并对其进行反汇编,将反汇编之后的信息写入dum... 阅读全文
posted @ 2015-12-13 21:10 DChipNau 阅读(444) 评论(0) 推荐(0) 编辑
摘要: Kmalloc申请的最大内存 以前虽然读过源码,但是对于它的申请上限确实没注意过。下面分析下,下面是kmalloc的源码。 可以看出,如果想知道kmalloc能申请的范围,需要跳转到文件中观察。下图便是包含的文件 可以看出,kmalloc一般情况下的上限是128K,但是如果打开了KMALLOC_MAX_SIZE这个宏,可以申请的内存会更大,如果想要知道上限的话,需要知道KMALLOC_MAX_S... 阅读全文
posted @ 2015-12-13 21:08 DChipNau 阅读(6075) 评论(0) 推荐(0) 编辑
摘要: 如何在不重新编译内核,不rmmod内核模块的情况下修改系统调用为了解决这个问题,最终实现了两种解决方式:1.Linux系统调用劫持2.Kprobes内核调试技术(并非真正的修改)下面分别说下:Linux系统调用劫持:其实就是修改内核符号表,来达到一个劫持的作用。因为系统调用实际上是触发了一个0x80... 阅读全文
posted @ 2015-12-13 21:07 DChipNau 阅读(2542) 评论(1) 推荐(2) 编辑
摘要: 一直想自己做一个最小系统,这次终于把想法付诸实现。 原理图如下: PCB图如下: 过了多日,板子终于邮到了,就是下面这个熊样。 焊接了稳压电路,发现稳压电路原理图部分画错,没有接地,然后飞了根线,稳压电路才稳稳的好用。 焊接stm32芯片的时候,其中VCC和GND引脚挂了锡,结果烧了一块稳压芯片,最 阅读全文
posted @ 2015-12-13 20:52 DChipNau 阅读(23158) 评论(1) 推荐(0) 编辑