linux - uc_mcontext 定义在哪里?

标签 linux signals cpu-registers signal-handling

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 sigcontextarch/x86/include/asm/sigcontext.h .

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

        ... snip ...
};

它是正确的吗,因为我没有看到 gregsstruct sigcontext ?欢迎任何建议。

最佳答案

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

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

关于linux - uc_mcontext 定义在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349169/

相关文章:

c++ - 使用匿名或 lambda 函数连接到 Boost Signals2 信号

linux - 当多个信号到达一个进程时,处理信号的进程之间的顺序是什么?

由 post_save 信号执行的 Django 代码发生在原子事务中

c++ - 如何检测 C/C++ 中的机器字长?

c - 通过 r15 访问 r8 的低 32 位

linux - 通过 shell 脚本退出或关闭 vim

c++ - 将静态库链接到共享库?

linux - raw_spinlock 是什么意思?

linux - 如何在 CentOs 7 上设置 yum 使用 tor?

c - gcc 参数寄存器在 x86-64 上溢出