Re: [問題] signal 與 使用 SIGSEGV 的問題
※ 引述《linsung (哈)》之銘言:
: 我主要是使用signal 的sigaction,
: 在設定去抓取SIGSEGV這個訊號讓handler處理相關動作時,
: 為何產生無限迴圈,導致output不停地印出"SIGSEGV !" ?
: 正常來說,不是跑完handler後就會跳回原來的執行位置上嗎?
^^^^^^^^^^^^^^^^
也就是引發該 exception 的指令
於是,又再一次引發 exception..
想繼續執行的話,可以在你的 handler 中
1. 把 ctx 轉成 ucontext_t, mcontext_t (google 一下)
2. 從裡面抓出引發 exception 的指令位置
3. 算出該道指令的長度,加回 program counter 即可
其中的 3. 在 RISC 做很簡單,但是 CISC 的話
就需要 decode 它的 op code 了
像 qemu, 或是 gnu binutils 裡面有可以參考/現成的
: 另外,我的情形不太適合用 longjmp 跟 setjmp ...
: ps: 我只有使用 SIGSEGV 時才會發生無限迴圈的情形
: 以下是我寫的範例程式,請各位參考看看:
: #include <stdio.h>
: #include <signal.h>
: #include <sys/mman.h>
: typedef struct my_vm{
: char *ptr;
: }myvm;
: void segv_handler (int signum, siginfo_t *si, void *ctx)
: {
: printf("SIGSEGV !\n");
: sleep(1);
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.228.25
推
06/20 13:33, , 1F
06/20 13:33, 1F
→
06/20 20:06, , 2F
06/20 20:06, 2F
→
06/20 20:07, , 3F
06/20 20:07, 3F
→
06/20 20:08, , 4F
06/20 20:08, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章