PTRACE_PEEKDATA
- для чтения раздела данных / кода ребенка (процесс в целом - так называемая трассировка). Как вы знаете, отладчики часто используют ptrace
. Они могут использовать этот вызов для проверки значений переменных. Например, в GDB/DBX
, если вы говорите
print count
отладчики внутренне вызовут ptrace
с PTRACE_PEEKDATA
и найдут его значение.
PTRACE_PEEKUSER
используется для чтения содержимого области USER ребенка, которая содержит содержимое регистров и другую информацию. sys / user.h перечисляет, что это за другая информация.
Например, область USER содержит,
struct user_regs_struct
{
long int ebx;
long int ecx;
long int edx;
long int esi;
long int edi;
long int ebp;
long int eax;
long int xds;
long int xes;
long int xfs;
long int xgs;
long int orig_eax;
long int eip;
long int xcs;
long int eflags;
long int esp;
long int xss;
};
Короче :
PTRACE_PEEKDATA
- для данных программы (например, переменных) и кода;
PTRACE_PEEKUSER
для таких вещей, как значения регистров и другая отладочная информация;
Обратите внимание на эквивалентность между PTRACE_PEEKDATA
и PTRACE_PEEKTEXT
. С man ptrace
:
В Linux нет отдельных адресных пространств для текста и данных, поэтому в настоящее время эти два запроса эквивалентны.