Похоже, что версия user_regs_struct
для i386 по какой-то причине называет его xgs
.
В sys/user.h
есть #ifdef __x86_64__
. Сторона #else
/* These are the 32-bit x86 structures. */
файла имеет следующее содержимое:
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;
};
Возможно, это изменилось в какой-то версии glib c? Это на x86-64 Arch GNU / Linux, так что это обычные заголовки vanilla glib c (взяты из ядра Linux).
ack user_regs_struct /usr/include
сразу нашел нужный файл. (например, grep -r
).
Обратите внимание, что в верхней части файла написано:
/* The whole purpose of this file is for GDB and GDB only. Don't read
too much into it. Don't use it for anything other than GDB unless
you know what you are doing. */
Я не знаю точно, почему такое строгое предупреждение, и действительно ли они означают ptrace
в целом. Если это больше, я бы с осторожностью использовал его вслепую, если чтение заголовка и проверка имен членов структуры не были для вас очевидны. Может быть, все в порядке, а может и нет, просто говорю, что я бы не стал полагаться на код, который вы пишете с его использованием, для чего-то важного без дополнительных исследований.