cpu-count.js:
console.log(require('os').cpus().length);
To compile:
gcc -shared -fPIC intercept.c -o intercept.so -ldl
To run:
LD_PRELOAD=./intercept.so node cpu-count.js
processor : 0 | |
BogoMIPS : 48.00 | |
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp flagm2 frint | |
CPU implementer : 0x00 | |
CPU architecture: 8 | |
CPU variant : 0x0 | |
cpu 82016 2676 148601 70586032 4466 0 3988 0 0 0 | |
cpu0 20312 667 36767 17647814 1168 0 1360 0 0 0 | |
intr 34168354 0 11705282 209637 0 0 0 1 0 0 0 21812717 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 479 0 0 0 0 23346 25949 27838 24097 0 180561 158092 70 0 0 0 0 0 139 59 42 45 | |
ctxt 64298657 | |
btime 1657020932 | |
processes 32061 | |
procs_running 1 | |
procs_blocked 0 | |
softirq 6051752 6 1731826 51 496308 1523 0 1471 2558365 0 1262202 |
struct timeval { | |
unsigned long tv_sec; /* seconds */ | |
unsigned long tv_usec; /* microseconds */ | |
}; | |
struct timezone { | |
int tz_minuteswest; /* minutes west of Greenwich */ | |
int tz_dsttime; /* type of DST correction */ | |
}; | |
int gettimeofday(struct timeval * tv, struct timezone * tz) { | |
tv->tv_sec = 0; | |
tv->tv_usec = 0; | |
return 0; | |
} |
#define _GNU_SOURCE | |
#include <dlfcn.h> | |
#include <stdio.h> | |
#include <string.h> | |
typedef int (*orig_open_f_type)(const char *pathname, int flags); | |
orig_open_f_type orig_open64 = NULL; | |
int open64(const char *pathname, int flags) { | |
//printf("open64('%s', %d)\n",pathname, flags); | |
if (0 == strncmp(pathname, "/proc/cpuinfo", strlen(pathname))) { | |
printf("Redirecting cpuinfo!\n"); | |
return orig_open64("/fake-cpuinfo", flags); | |
} | |
if (0 == strncmp(pathname, "/proc/stat", strlen(pathname))) { | |
printf("Redirecting /proc/stat\n"); | |
return orig_open64("/fake-stat", flags); | |
} | |
int fd = orig_open64(pathname, flags); | |
return fd; | |
} | |
__attribute__((constructor)) void init() { | |
printf("Intercepting open() calls\n"); | |
if (orig_open64 == NULL) { | |
orig_open64 = (orig_open_f_type)dlsym(RTLD_NEXT, "open64"); | |
} | |
} |