linux uc_mcontext定义在哪里?

4xy9mtcn  于 2023-02-15  发布在  Linux
关注(0)|答案(1)|浏览(218)

sa_sigaction的第三个参数是一个指针,它指向一个依赖于计算机的struct ucontext,我想知道可以从struct ucontext转储什么。

void (*sa_sigaction)(int signum, siginfo_t *info, void *ucontext)

struct ucontext {
        unsigned long     uc_flags;
        struct ucontext  *uc_link;
        stack_t           uc_stack;
        struct sigcontext uc_mcontext;
        sigset_t          uc_sigmask;   /* mask last for extensibility */
};

特别是通过uc_mcontext(如果你能告诉我在哪里可以了解更多关于其他数据成员的信息,那就太好了),因为人们通常使用uc_mcontext来转储主机寄存器,就像这样。

ucontext->uc_mcontext.gregs[REG_EIP]

因为uc_mcontext类型是struct sigcontext,所以我在arch/x86/include/asm/sigcontext.h中查找struct sigcontext

struct sigcontext {
        unsigned short gs, __gsh;
        unsigned short fs, __fsh;
        unsigned short es, __esh;
        unsigned short ds, __dsh;

        ... snip ...
};

因为我在struct sigcontext中没有看到gregs,所以它是正确的吗?欢迎任何建议。

2wnc66cl

2wnc66cl1#

您正在查看sigcontext的Linux内核定义,您应该查看structucontext的C库头文件,它在/usr/include/sys/ucontext. h文件中定义
请注意,它是特定于体系结构的-例如,x86和PPC的字段是完全不同的!

相关问题