摘要:
Proc/pid/maps显示进程映射了的内存区域和访问权限。对应内核中的操作集为proc_pid_maps_op,具体的导出函数为show_map。内核中进程的一段地址空间用一个vm_area_struct结构体表示,所有地址空间存储在task->mm->mmap链表中。 一个文件可以映射到进程的 阅读全文
摘要:
汇编指令集太多,如果不用就会忘记,所以将intel处理器官方的指令集整理一下,有需要的人可以参考一下! 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。 1. 通用数据传送指令: MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PU 阅读全文
摘要:
正则表达式 - Regular Expression 正则表达式用于匹配(或检索、提取、替换)字符串中字符组合 它是在编程各个领域都会用到的一种数据模式 它制定了一种字符串规则,如果符合了就会匹配,否则就"不合法" 正则表达式的特点: 超强的灵活性、逻辑性和功能性 用极简单的方式操作控制复杂的字符串 阅读全文
摘要:
现代软件系统中,除了进程,线程也是一个非常重要的概念。随着CPU频率增长开始出现停滞,处理器逐渐开始想多核方向发展。多线程,作为实现软件并发执行的重要方法之一,也开始被重视。 线程概念 线程(Thread),也称轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一 阅读全文
摘要:
当我们在 Linux 的 bash 中输入命令执行某个 ELF 可执行文件时,如下所示。 $ ./hello.out 那么,Linux 系统是如何装载该 ELF 文件并执行的呢?这个过程可以分为以下这些步骤: 创建新进程 检查可执行文件类型 搜索匹配装载处理过程 装载执行可执行文件 首先在用户层面, 阅读全文
摘要:
模块化设计是软件开发中最常用的设计思想。链接(Linking) 本质上就是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确衔接。比如: 我们在模块main.c中使用另一个模块func.c中的foo()函数。我们在main.c模块中每一处调用foo时都必须确切知道foo函数的地址。但由于每 阅读全文
摘要:
目前,PC平台流行的 可执行文件格式(Executable) 主要包含如下两种,它们都是 COFF(Common File Format) 格式的变种。 Windows下的 PE(Portable Executable) Linux下的 ELF(Executable Linkable Format) 阅读全文
摘要:
下面以“Hello World”程序为例,来介绍程序的编译与链接过程。 // hello.c #include <stdio.h> int main() { printf("Hello World!\n"); return 0; } 在Linux下,可以直接使用GCC来编译Hello World程序 阅读全文
摘要:
发现一个好好玩的东西。 将任何文件的 URL 中的“github.com”替换成“github.githistory.xyz”即可查看文件修改历史。 阅读全文
摘要:
通过工具checksec可以查看ELF文件保护机制 gcc编译参数 NX:-z execstack / -z noexecstack (关闭 / 开启) Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关 阅读全文