uc_mcontext定义在哪里?

时间:2012-09-10 09:48:59

标签: linux signals

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,我会在struct sigcontext中查看arch/x86/include/asm/sigcontext.h

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

        ... snip ...
};

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

1 个答案:

答案 0 :(得分:3)

您正在查看sigcontext的Linux内核定义。您应该查看struct ucontext的C库头文件。它在/usr/include/sys/ucontext.h文件中定义

请注意,它是特定于体系结构的 - 例如例如,x86和PPC的字段完全不同!