このタイプのプログラミングは初めてなので、質問が些細なことでしたら申し訳ありません。私がやろうとしているのは、プログラムでセグメンテーション違反を引き起こし、プログラムを終了する代わりに、信号を処理してセグメンテーション違反後に実行を継続したいということです。動作しているように見えるコードを書きましたが、これがこれを行う方法であることを確認したいだけです。だからここに私のコードがあります。
void myhandle(int mysignal, siginfo_t *si, void* arg)
{
printf("Signal is %d\n",mysignal);
ucontext_t *context = (ucontext_t *)arg;
context->uc_mcontext.gregs[REG_RIP]++;
}
int main(int argc, char *argv[])
{
struct sigaction action;
action.sa_handler=myhandle;
sigaction(11,&action,NULL);
printf("Before segfault\n");
int *a=NULL;
int b=*a;
printf("I am still alive\n");
return 0;
}
myhandle 内の printf が 2 回実行される理由を説明してもらえますか? また、このコードは大丈夫ですか?
ありがとうございました。