Как я могу перехватить вызовы Linux Linux?

Правильный путь , поскольку SAM записывает ранее:

reg Query "HKLM \ Hardware \ Description \ System \ CentralProcessor \ 0" / v "Идентификатор" | find / i "x86"> NUL & amp; & amp; set OS = 32BIT || установите OS = 64BIT

, но с / v «Идентификатор» немного правильнее.

13
задан Matheus Santana 3 April 2018 в 10:28
поделиться

7 ответов

при реальной необходимости в решении, Вы могли бы интересоваться руткитом DR, который выполняет просто это, http://www.immunityinc.com/downloads/linux_rootkit_source.tbz2 , статья об этом здесь http://www.theregister.co.uk/2008/09/04/linux_rootkit_released/

1
ответ дан sztanpet 3 April 2018 в 10:28
поделиться

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

В случае, если Вы не знаете, Valgrind главным образом используется для нахождения утечек памяти и других связанных с памятью ошибок. Но базовая технология является в основном x86 эмулятором. Это эмулирует Вашу программу и прерывает вызовы к malloc/free и т.д. Хорошая вещь, Вы не должны перекомпилировать для использования ее.

Valgrind имеет функцию, которую они называют Функция, Переносящаяся , который используется для управления перехватом функций. Посмотрите раздел 3.2 из руководство Valgrind для деталей. Можно установить функцию, переносящуюся для любой функции, которую Вы любите. Как только вызов прерывается альтернативная функция, которую Вы обеспечиваете, тогда вызывается.

7
ответ дан 3 April 2018 в 10:28
поделиться
  • 1
    спасибо за Ваш быстрый ответ Jon! Моя проблема состояла в том, что другая задача зависит от неудавшейся задачи, поэтому это ожидало бы навсегда на неудавшейся задаче. Моя идея была, что исключение поймано сразу, когда задача перестала работать, который не имеет место. благодарит указать на это. – thumbmunkeys 18 November 2010 в 17:59

Почему не может Вы / не хотеть использовать прием LD_PRELOAD ?

Пример кода здесь:

/*
 * File: soft_atimes.c
 * Author: D.J. Capelis
 *
 * Compile:
 * gcc -fPIC -c -o soft_atimes.o soft_atimes.c
 * gcc -shared -o soft_atimes.so soft_atimes.o -ldl
 *
 * Use:
 * LD_PRELOAD="./soft_atimes.so" command
 *
 * Copyright 2007 Regents of the University of California
 */

#define _GNU_SOURCE
#include <dlfcn.h>
#define _FCNTL_H
#include <bits/fcntl.h>

extern int errorno;

int (*_open)(const char * pathname, int flags, ...);
int (*_open64)(const char * pathname, int flags, ...);

int open(const char * pathname, int flags, mode_t mode)
{
    _open = (int (*)(const char * pathname, int flags, ...)) dlsym(RTLD_NEXT, "open");
    if(flags & O_CREAT)
        return _open(pathname, flags | O_NOATIME, mode);
    else
        return _open(pathname, flags | O_NOATIME, 0);
}

int open64(const char * pathname, int flags, mode_t mode)
{
    _open64 = (int (*)(const char * pathname, int flags, ...)) dlsym(RTLD_NEXT, "open64");
    if(flags & O_CREAT)
        return _open64(pathname, flags | O_NOATIME, mode);
    else
        return _open64(pathname, flags | O_NOATIME, 0);
}

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

Принятие Вы не можете изменить программу, и не может (или не хотеть к), изменяют ядро, подход LD_PRELOAD является лучшим, предполагая, что Ваше приложение является довольно стандартным и не на самом деле один, это злонамеренно пытается закончить Ваш перехват. (В этом случае Вам будет нужен один из других методов.)

17
ответ дан Matheus Santana 3 April 2018 в 10:28
поделиться

У меня нет синтаксиса, чтобы сделать, это корректно с LKM бесцеремонно, но этой статьей предоставляет хороший обзор того, что необходимо было бы сделать: http://www.linuxjournal.com/article/4378

Вы могли также просто исправить функцию sys_open. Это запускает на строке 1084 из file/open.c с Linux 2.6.26.

Вы могли бы также видеть, не можете ли Вы использовать inotify, systemtap или SELinux, чтобы сделать весь этот вход для Вас без Вас имеющий необходимость создать новую систему.

2
ответ дан DJ Capelis 3 April 2018 в 10:28
поделиться

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

3
ответ дан pjz 3 April 2018 в 10:28
поделиться

Если Вы просто хотите сделать это для отладки целей, изучают strace, который создается в вершине ptrace (2) системный вызов, который позволяет Вам поднимать трубку код, когда системный вызов сделан. Посмотрите часть PTRACE_SYSCALL страницы справочника.

2
ответ дан Johan Dahlin 3 April 2018 в 10:28
поделиться

Некоторые приложения могут обмануть strace/ptrace для не выполнения, таким образом, единственная реальная опция, которую я имел, использует systemtap

Systemtap, может прервать набор системных вызовов в случае необходимости из-за его подстановочного соответствия. Systemtap не является C, но отдельным языком. В основном режиме systemtap должен препятствовать тому, чтобы Вы делали глупые вещи, но это также может работать в "опытном режиме", который отступает к разрешению разработчику использовать C, если это требуется.

Это не требует, чтобы Вы исправили свое ядро (Или по крайней мере не был должен), и как только модуль был скомпилирован, можно скопировать его с поля теста/разработки и вставить его (через insmod) в производственной системе.

я должен все же найти применение Linux, которое нашло способ работать вокруг/избегать того, чтобы быть пойманным systemtap.

5
ответ дан 3 April 2018 в 10:28
поделиться
Другие вопросы по тегам:

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