思路概述:编写linux c代码,生成对应的动态链接库(so文件),通过LDPRELOAD实现对/proc文件系统访问的劫持。劫持之后,实现容器内正确的数据计算逻辑,并生成对应的/proc文件放到容器内/tmp/proc目录,劫持后对应的命令的数据来源就从/tmp/proc/*中获取。
下文以劫持/proc/meminfo为例进行说明:
编写hijack_meminfo.c,用于劫持/proc/meminfo的open操作,从而劫持free命令的输出。
#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <stdarg.h>
int open( const char * pathname, int flags)
{
typeof(open) *old_open;
old_open = dlsym(RTLD_NEXT, "open");
//printf("in my hijack open!");
// 劫持/proc/meminfo的open
char *s_meminfo = strstr(pathname, "/proc/meminfo");
if (s != NULL) {
/*
TODO:调用自己开发的容器meminfo信息收集函数,生