又一个问题:
初始SIGTRAP暂停进程,然后用STEPINTO调用ptrace来执行下一条指令。在ptrace调用之后,我调用waitpid(...)并且确实它确实收到了SIGTRAP信号!太好了!
然而,当我通过调用
检查siginfo_t结构时 ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo)
字段如下:
si_signo = SIGTRAP
si_code = 1
但是,1是断点的信号代码。在这种情况下没有遇到断点:
/* `si_code' values for SIGTRAP signal. */
enum
{
TRAP_BRKPT = 1, /* Process breakpoint. */
# define TRAP_BRKPT TRAP_BRKPT
TRAP_TRACE /* Process trace trap. */
# define TRAP_TRACE TRAP_TRACE
};
发生了什么事?
所有涉及的调用都返回成功(0),而errno也是0。
编辑:那么当我点击一个真正的0xCC断点时会发生什么? 触发SIGTRAP并且si_code字段为0x80! 0x80甚至没有为SIGTRAP定义! :(