抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

LD_PRELOAD劫持

LD_PRELOAD tips很多程序都需要链接共享库才能运行, 链接共享库默认会从系统/usr/lib目录中查找, 然后链接.so文件。而且对于同名函数, 只会识别最先出现的那一个。指定LD_PRELOAD变量就能让链接器先去找LD_PRELOAD指定的路径再去找默认路径, 从而实现对函数劫持。 详见man ld.so 实验例子我们可以通过strace查看一个程序执行过程中使用到的系统调用...

如何让已经运行的程序到后台运行

<c-z>挂起, 再开tmux, 在tmux里fg jobs fg bg disown <pid>shell退出不影响程序 中途改变想法了想记录日志,可以使用调试器修改描述符,从而记录日志123$ gdb -p <pid>(gdb) P (int)dup2((long)open("path/to/file", ...

IO多路复用select、poll、epoll介绍

IO多路复用在高并发环境(如网络服务器)中同时处理多个请求的能力就显得尤为重要。很多人可能第一印象就会想到多线程,但是多线程需要进行很多的上下文切换,连接很多时上下文切换的代价就很高。因此采用单线程,但是单线程如何处理并发请求呢? 得益于DMA,多数据到来时直接内存访问,不会丢失数据,因此可以有后序内容 以写一个网络服务器为例。每个网络连接在都是以文件描述符(以下简称fd)的形式存在 sel...

重载是如何实现的

overload可直译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时就会根据不同的参数样式,来选择合适的方法执行。 –百度百科 原理重载本质上就是编译器根据原函数名和参数类型对原函数名进行改编,以区分接受不同参数的同名函数。 看下面一段cpp代码: 1234567891011// a.cppvoid func(int a){&#...

制作一个简易的中间件架构

为何需要中间件我们不应该把业务逻辑和非业务逻辑揉在一起。非业务逻辑如打印日志、计时等。因为如果我们需要一个新的日志系统,而我们打印日志的逻辑杂揉在每个handler中,那我们就得修改每个handler,费时费力且不明智。 中间件就是一种剥离非业务逻辑的方法。 原理我们可以使用函数闭包来轻松实现剥离业务逻辑和非业务逻辑。 假设我们的业务就是以各种姿势处理字符串然后打印。如处理成===str==...

RPC intro

RPC (Remote Procedure Call)RPC,远程过程调用,是一个计算机通信协议。 相对的就是本地过程调用,即一个程序中调用它的子程序,可以直接通过地址访问。而RPC的远程,就是跨进程访问的意思。 该协议允许运行于一台计算机的程序调用另一个地址空间(通常是开放网络中的一台计算机)的子程序。程序员就像调用本地程序一样,无需额外地为这个交互作用编程。 RPC是一种Client/S...

什么是dll

什么是DLLDLL(Dynamic Link Library),动态链接库,linux下是.so文件,win下是.dll文件。 之所以需要库,是因为可以进行代码解耦和代码重用,由库文件对外提供服务,如exe调用dll。还有一个作用就是在不希望别人看到源码但需要使用我们的功能时隐藏源码。 静态库 win下是.lib文件,linux下是.a文件 它作为程序的一个模块,在链接期间被合并到程序中 ...

CAS简记

CAS(Compare And Swap)CAS是一种乐观锁。何谓悲观,编译器认为就是如果不严格同步线程调用则一定会产生异常,所以悲观锁会阻塞其他所有线程调用(互斥)。 但是并不是所有操作都一定会产生异常,如多线程的读操作就不会。 CAS机制在多线程对共享资源访问时比较共享资源当前的状态(newValue)和发起调用时的状态(oldValue)。如果状态一样则还没其他线程访问,这个线程(sw...

正则表达式基础语法

Base/Extended Regex . 匹配任何一个字符 * (贪婪)匹配任何数量(包括0)的前面的内容,贪婪匹配 + 匹配一个或多个的前面的内容,非贪婪匹配 - 匹配零个或多个的前面的内容,非贪婪匹配 {1} 重复次数1 \S 任何非空白字符 \s 任何空白字符 ? 前面内容是可选的 \ 有时可以起到转意的作用,\S等就是例外 [0-9] 任何0到...