Как протоколировать каждую инструкцию и изменения в памяти в любом процессе

Синтаксис var = $ () сохранит stdout из кода в скобках в переменной, а не значение выхода функции / процесса. Значение выхода / возврата будет сохранено в $?

Вы можете тестировать sts как строку для содержимого эха, или вы можете проверить $? против ожидаемого возвращаемого значения. В моем bash я не могу вернуть true только числовые значения.

Также обратите внимание, что пробелы вокруг [ и ] не являются обязательными, вы должны включить их. Итак,

sts=$(check)
if [[ "$sts" = *"is running"* ]]; then
    ...

обратите внимание, что я использовал [[...]] вместо [...] , чтобы я мог использовать подстановочный знак

Вы также можете использовать

if check; then
    ...

если у вас есть проверка возврат 0 или "успех"

0
10.01.2019, 08:02
1 ответ

gdb может делать именно то, что вы описываете. Вы можете подключиться к запущенному процессу 123 с помощью такой команды, как:

$ gdb -p 123

Или передать путь к исполняемому файлу:

$ gdb /path/to/program 123

Вы можете использовать команду attach из командной строки gdb для того же эффекта.

Это, кажется, делает все, что вы описываете, поскольку gdb уже может приостанавливать, шагать и проверять память присоединенного процесса (и делать даже больше, например изменять содержимое памяти.)

Основной функцией ядра, используемой gdb, является ptrace (2)(берегитесь, там могут быть драконы! ), поэтому, если вы хотите что-то похожее на gdb, но в чем-то отличающееся, вы можете использовать для этой цели ptrace.

Разработка нового интерфейса ядра, конечно, может быть выполнена, но неясно, что это может предложить, чего ptrace до сих пор не предлагает... Крючки, необходимые для такого рода функций, вероятно, довольно инвазивны в ядро, поэтому вам потребуется сильно исправленное дерево исходного кода ядра для создания чего-то похожего на ptrace (, что вряд ли можно сделать в простом загружаемом модуле ядра.)

Короче говоря, gdb и ptrace делают то, что вы описываете. Конечно, вы можете разработать альтернативы этому инструменту и системному вызову, просто неясно, в чем смысл этого.

1
28.01.2020, 02:41

Теги

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