Каковы возможные способы прервать системные вызовы на средах Unix?

Используйте

app:backgroundTint

вместо

android:backgroundTint

Надеюсь, это сработает.

6
задан Jens 1 June 2012 в 08:57
поделиться

2 ответа

Не знаком с AIX, но следующее работает в Linux и Solaris. Вы можете использовать переменную среды LD_PRELOAD, которая сообщает ld.so о необходимости загрузить разделяемую библиотеку перед libc, а затем написать свою собственную версию системного вызова и, при необходимости, вызвать оригинал. man ld.so для получения дополнительной информации. Что-то вроде

#include <dlfcn.h>

typedef int (*ioctl_fn)(int, int, void*);

static 
int
my_ioctl(int      fildes,
         int      request,
         void*    argp,
         ioctl_fn fn_ptr)

{
    int result = 0;

    /* call original or do my stuff */
    if (request == INTERESTED)
    {
        result = 0;
    }
    else
    {
        result = (*fn_ptr)(fildes, request, argp);
    }

    return result;
}

/*
 * override ioctl() - on first call get a pointer to the "real" one
 * and then pass it onto our version of the function
 */
int
ioctl(int fildes,
      int request,
      void* argp)
{
    static ioctl_fn S_fn_ptr = 0;

    if (S_fn_ptr == 0)
    {
        S_fn_ptr = (ioctl_fn)dlsym(RTLD_NEXT, "ioctl");
    }

    return my_ioctl(fildes, request, argp, S_fn_ptr);
}

Вырезало это из кода, который у меня валялся, извиняюсь, если я сделал это неправильно.

3
ответ дан 17 December 2019 в 07:08
поделиться

Ну, всегда есть systrace .

1
ответ дан 17 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: