我有以下程序:
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?,回答了我的问题。现在我不明白为什么这些数字在没有其他作用的情况下仍然起作用,但是我想这是另一个问题。