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。程序中......

C语言宏assert

assert宏

/* assert example */

#include <stdio.h> /* printf */

#include <assert.h> /* assert */

void print_number(int* myInt) {

assert (myInt!=NULL);

printf ("%d\n",*myInt);

}

int main ()

{

int a=10;

int * b = NULL;

int * c = NULL;

b=&a;

print_number (b);

print_number (......

使用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>

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

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",......

cJSON使用入门

本文例子及相关解释来自文章cJSON的使用方法,修复原文中的几个明显错误和内存泄露,因在项目中需要使用到cJSON,因此本文主要学习cJSON的相关使用,源码阅读与解析在后续文章中更新。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScrip......

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......

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或......