Linux下LD_PRELOAD的简单用法

在阅读某大佬写的一篇blog,里面有提到LD_PRELOAD技术作为调试和测试手段,学习该知识点,主要参考文章:

Dynamic linker tricks: Using LD_PRELOAD to cheat, inject features and investigate programs

LD_PRELOAD用法

LD_PRELOAD,是个环境变量,用于动态库的加载,动态库加载的优先级最高,一般情况下,其加载顺序为LD_PRELOAD > LD_LIBRARY_PATH > /etc/ld.so.cache > /lib>/usr/lib。程序中......

使用jansson解析JSON

介绍

Jansson是一个对json格式进行编码,解码,操作的c语言库,有以下特点

简单的api设计

文档详尽

无其他依赖库

完全支持UTF-8

大量的测试用例

Jansson是MIT license源码发布方式

Jansson支持多个平台,包括Unix以及windows

编译安装

解压并编译

tar -xvf jansson-2.4.tar.gz

./configure

make

make check

make install

简单使用

只需要包含一个头文件

#include <jansson.h>

直接连接库方式编......

cJSON1.7.11源码学习

由于项目中使用到json,之前使用只是参考别人的使用,未对cJSON源码进行学习,因此本文学习cJSON源码内部实现,记录学习cJSON源码的过程。

JSON相关知识:json介绍

学习的cJSON源码版本为1.7.11.

添加中文注释版本github地址为:cJSON1.7.11中文注释版

准备工作#ifdef __WINDOWS__

/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a pro......

ipcs命令详解

ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。对于程序员非常有用,普通的系统管理员一般用不到此指令。

ipcs shows information on the inter-process communication facilities for which the calling process has read access.By default it shows information about all three resources: shared memory segments, message queues, and sem......

C语言宏offsetof

C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designator 给定的,结构的名称是在 type 中给定的。

在阅读Linux/UNIX系统编程手册一书时阅读源代码时有如下相关注释:

/* REQ_MSG_SIZE computes size of 'mtext' part of 'requestMsg' structure.

We use offsetof() to handle the possibility that there ar......

C C++const与数组

在常讨论问题的qq group中看到大家对一个问题争论不一,本着学习的态度,编写demo,复习和学习相关知识,如有错误欢迎指正。

const例子一:#include <stdio.h>

int main()

{

/*这里加*表示数组parr内容不能修改即使用下面注释的语句赋值是非法的*/

char * const parr[] = {"abc","def"};

char *ptr = "Helloworld";

//parr[1] = ptr;

printf("parr[0] = %s\n",......

TLPI-Chapter 45 System V IPC介绍

这节开始学习System V IPC,书中后面会介绍POSIX IPC,两者之间的区别可以参考stackoverflow上的一篇回答。system-v-ipc-vs-posix-ipc

System V IPC包含消息队列、信号量和共享内存。

消息队列

消息队列用来在进程之间传递消息。消息队列与管道有点像,但存在两个重大差异:

第一消息队列是存在边界的,这样读者和写者之间以消息进行通信,而不是通过无分隔符的字节流进行通信。

第二每条消息包括一个整型的type字段,并且可以通过类型选择消息而无需以消息被写入的顺序来读取消息。

信号量

信号量允许多个进程同步它们的动作。一个信号量......

使用cron进行调度

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。

通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

crontab文件

crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或......

TLPI-Chapter 44 管道和FIFO

管道由pipe函数创建,提供一个单向数据流。pipe函数返回两个文件描述符:fd[0]与fd[1],前者打开来读,后者打开来写。

管道的典型用途是在父子进程之前提供进程间通信手段。首先,由父进程创建一个管道,然后调用fork创建子进程。如果父进程关闭管道的读出端,子进程关闭管道的写入端。在父子进程间就形成了一个单向数据流。

通常我们在shell中输入一个像下面的命令时:

cmd1 | cmd2 | cmd3

将会创建三个进程和其中的两个管道。将每个进程的读出端复制到相应进程的标准输入,把每个管道的写入端复制到相应进程的标准输出。

#include <unistd.h>......

制作ubuntu19.04 U盘启动盘

收拾东西发现了7 8年之前用过的一款渣渣windows笔记本,使用windows系统的话发现已经卡到怀疑人生,因此本文记录使用mac制作linux U盘启动盘,然后安装centos7的全部过程。

Windows制作U盘启动盘存在很多成熟的工具比如UltralISO deepin等等,mac下无需使用工具,直接使用dd命令,详细操作步骤如下.

Mac下将ISO写入U盘可使用命令行工具dd,操作如下:

1.找出U盘挂载的路径,使用如下命令:diskutil list

bogon:~ coder52$ diskutil list

/dev/disk0 (internal, phys......