如何在此程序中引发浮点异常以触发SIGFPE处理程序?

我有以下程序:

void win(int a)
{
   setresuid(geteuid(),geteuid(),geteuid());
   printf("WIN!\n");
   system("bin/sh");
   exit(0);
}

int main(int argc,char ** argv)
{
   puts("blahblah");

   if (argc != 3 || !atoi(argv[2]))
      return 1;

   signal(SIGFPE,win);

   return abs(atoi(argv[1]))/atoi(argv[2]);

}

我已经查看了SIGFPE的工作方式(https://www.gnu.org/software/libc/manual/html_node/Program-Error-Signals.html),并阅读了有关浮动下溢和上溢的信息,但是我似乎并没有理解,因为我没有尝试任何方法。我为参数尝试了一些不同的怪异数字,包括使第二个参数为零,两个参数的长负数和正数,带有很多数字的浮点数,小数等,我检查了退出代码,可以通过将大的负数除以2得到零,但是当我得到零时,它从未触发处理程序函数,仅当我回显$?时才显示。我误解了吗?非常感谢您的帮助。

编辑: 我发现Why is SIGFPE not triggered after adding a printf line?,回答了我的问题。现在我不明白为什么这些数字在没有其他作用的情况下仍然起作用,但是我想这是另一个问题。

chenzhaoxia 回答:如何在此程序中引发浮点异常以触发SIGFPE处理程序?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3091256.html

大家都在问