我对逆向工程比较陌生,我决定练习使用 pwnable.tw 中的挑战。目前,我正在处理“银弹”挑战。
在测试时,我注意到如果程序运行并且用户选择选项 4,那么程序会因段错误而崩溃,而不是干净地退出。GDB 中的测试确认这发生在 0x08048954 处的“调用退出”指令期间。
阅读退出手册页,我可以看到在某些情况下,当使用 atexit(3) 或 on_exit(3) 注册函数时,可能会发生未定义的行为。但是,我看不到任何以这种方式注册的函数,也看不到任何其他退出无法成功执行的方式。为什么在退出调用期间会发生段错误?
供参考,周边代码为:
0x080489F1:
push offset aDonTGiveUp ; "Don't give up !"
call puts
add esp, 4
push 0
call exit
push offset aInvalidChoice ; "Invalid choice"
call puts
add esp, 4
nop
感谢您抽出时间来阅读。