转自《内核工匠》
本文主要描述了Linux系统上关于位置无关代码PIC,位置无关可执行程序PIE及地址空间布局随机化ASLR三个主要特性的原理及联系。第一部分首先介绍了应用程序地址空间的基础知识作为铺垫;第二部分重点讲解PIC的实现原理;第三部分简单介绍了PIE的概念;第四部分讲解ASLR和PIE如何配合工作,以实验的方式来说明二者的联系。
2025年03月26日
转自《内核工匠》
本文主要描述了Linux系统上关于位置无关代码PIC,位置无关可执行程序PIE及地址空间布局随机化ASLR三个主要特性的原理及联系。第一部分首先介绍了应用程序地址空间的基础知识作为铺垫;第二部分重点讲解PIC的实现原理;第三部分简单介绍了PIE的概念;第四部分讲解ASLR和PIE如何配合工作,以实验的方式来说明二者的联系。
2025年03月26日
一、背景
这两天由于一些原因研究了研究如何在客户端C++代码中调用web服务端接口,需要访问url,并传入json数据,拿到返回值,并解析。
2025年03月26日
前几天帮同事跟踪的一个程序莫名退出,没有core dump(当然ulimit是打开的)的问题。我们知道,正常情况下,如果程序因为某种异常条件退出的话,应该会产生core dump,而如果程序正常退出的话,应该是直接或者间接的调用了exit()相关的函数。基于这个事实,我想到了这样一个办法,在程序开始时,通过系统提供的atexit(),向系统注册一个回调函数,在程序调用exit()退出的时候,这个回调函数就会被调用,然后我们在回调函数中打印出当前的函数调用栈,由此便可以知道exit()是在哪里调用,从而上述问题便迎刃而解了。上述方法用来解决类似问题是非常行之有效的。在上面,我提到了在“回调函数中打印出当前的函数调用栈”,相信细心的朋友应该注意到这个了,本文的主要内容就是详细介绍,如何在程序中打印中当前的函数调用栈。
2025年03月26日
在应用程序开发过程中经常会进行IO设备的操作,比如磁盘的读写,网卡的读写,键盘,鼠标的读入等,大多数应用开发人员使用高级语言进行开发,例如C,C++,java,python等,这些高级语言都提供了标准库或者API去操作IO设备,不过标准库或者API最终还是通过系统调用来实现操作IO设备的,系统调用是操作系统提供的,它是操作系统内核的一部分。
系统调用封装了对硬件操作的所有细节,而标准库或者SDK又在系统调用的基础上做了高度抽象的封装和优化,因此使得应用程序开发人员的日子好过多了,开发效率也提高了不少。
2025年03月25日
netstat:netstat 是一个网络管理工具,用于显示网络连接、路由表、接口统计、伪装连接以及多播成员等信息。尽管它已被部分系统(如现代 Linux 系统)用 ss 替代,但 netstat 在网络排查中仍然有很大用处。