bool try_ret_bool(int flag)
{
if (flag == 0) return true;
}
测试程序:
try_ret_bool(0) 毫无疑问返回true,控制之内
try_ret_bool(1) 返回?
接下去各种试验:
int val = is_existed(1) 发现返回的是22,究竟是啥原因呢?看看汇编吧,
0x08049641<+31>: call0x80496fa<try_ret_bool()>
0x08049646<+36>: movzbl%al,%eax
0x08049649<+39>: mov%eax,0x4(%esp)
0x0804964d<+43>: movl$0x8049d66,(%esp)
0x08049654<+50>: call0x80487b0<printf@plt>
=>0x08049659<+55>: leave
0x0804965a<+56>: ret
(gdb) p *(int*)($esp+4) $1 = 22
如果try_ret_bool提供返回值,会保存在暂顶+4的位置,一个指针偏移量,返回给eax寄存器作为最终返回值提供给printf进行格式化
所以,如果你不提供return返回值,$esp+4的位置就根据代码段解析的情况来取值。
但我不清楚
movzbl%al,%eax
movl$0x8049d66,(%esp)
的意思,需要后续再研究,大牛看到的可以帮我解答下
如果觉得《bool返回值的函数如果不return会咋样》对你有帮助,请点赞、收藏,并留下你的观点哦!