LINUX.ORG.RU

Нужен модуль ядра, подмухлёвывающий время для определённого процесса


0

0

Есть ряд проприетарных приложений, которые работают условно говоря месяц, после чего отказываются работать.
Если сменить дату системы перед запуском - приложения стартуют успешно.

Так вот - есть ли какой-нить модуль, который мог бы по настройкам указать для приложения собственное время...

Т.е. понятно как это должно выглядеть - просто подменяется syscall time () на уровне ядра и если он вызван для процесса с определённым именем - выставляется определённое время, для всех остальных - syscall по-умолчанию...

Кто-нибудь знает что-то подобное?


А не проще самому новый системный вызов создать?

marsijanin ★★
()

Можно попробовать сначала так.

murr:/tmp # cat xxx.c
#include <sys/time.h>
#include <time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz) {
    memset(tv, 0, sizeof(*tv));
    memset(tz, 0, sizeof(*tz));
    return 0;
}

int clock_gettime(clockid_t clk_id, struct timespec *tp) {
    memset(tp, 0, sizeof(*tp));
    return 0;
}
murr:/tmp # gcc -shared xxx.c -c
xxx.c: In function ‘gettimeofday’:
xxx.c:5: warning: incompatible implicit declaration of built-in function ‘memset’
xxx.c: In function ‘clock_gettime’:
xxx.c:11: warning: incompatible implicit declaration of built-in function ‘memset’
murr:/tmp # ld -shared xxx.o -o xxx.so
murr:/tmp # LD_PRELOAD=/tmp/xxx.so date
Thu Jan  1 03:00:00 MSK 1970
murr:/tmp # date
Tue Jul 17 22:28:52 MSD 2007

Если хотите поймать системные вызовы - делайте ptrace. :)

Murr ★★
()
Ответ на: комментарий от BigBiker

>datefudge устроит ? Более чем, спасибо :)

anonymous
()
Ответ на: комментарий от BigBiker

>datefudge

скачал для интереса версию 1.12

код аналогичный, но не ловящий clock_gettime(который, как видно под strace, использует date), посему не меняющий показания date.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.