#include <stdio.h>
#include <dlfcn.h>
#include <time.h>
#include <sys/time.h>
typedef int (*GETTIMEOFDAY)(struct timeval *tv, struct timezone *tz);
typedef int (*CLOCK_GETTIME)(clockid_t clk_id, struct timespec *tp);
GETTIMEOFDAY real_gettimeofday;
CLOCK_GETTIME real_clock_gettime;
float speedmultiplier;
int new_clock_gettime(clockid_t clk_id, struct timespec *tp)
{
int r = -1;
struct timespec currenttp;
r = real_clock_gettime(clk_id, ¤ttp);
if (clk_id <= 9) {
// Your hook code here
// Modify the currenttp according to the speed multiplier
if (tp) {
*tp = currenttp;
}
} else {
if (tp) {
*tp = currenttp;
}
}
return r;
}
int new_gettimeofday(struct timeval *tv, struct timezone *tz)
{
int r;
struct timeval currenttv;
r = real_gettimeofday(¤ttv, tz);
// Your hook code here
// Modify the currenttv according to the speed multiplier
if (tv) {
*tv = currenttv;
}
return r;
}
int speedhack_initializeSpeed(float speed)
{
// Load the real functions
real_gettimeofday = dlsym(RTLD_NEXT, "gettimeofday");
real_clock_gettime = dlsym(RTLD_NEXT, "clock_gettime");
// Your initialization code here
// Store the initial time and offset
speedmultiplier = speed;
return 1;
}