OverrideStandardFunction

Материал из KLUG
Перейти к: навигация, поиск

Переопределение функции С

Пример программы в time.c:

// gcc ./time.c
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t curtime = time(NULL);
  printf("Curr time: %u", (unsigned)curtime);
  return 0;
}



Функцию time() подделываем так fake_time.c:

// gcc -fPIC -shared -Wl,-soname,fake_time.so -o fake_time.so fake_time.c  -ldl
#define _GNU_SOURCE

#include <time.h>
#include <dlfcn.h>

time_t time (time_t *t)
{
  time_t (*now)(time_t*);
  now = dlsym(RTLD_NEXT, "time");
  return now(t) + 100000000; // Вот тут мы перемещаемся в будущее...
}

Как запускать:

LD_PRELOAD="./fake_time.so" ./a.out
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты