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>: call 0x80496fa <try_ret_bool()>
0x08049646 <+36>: movzbl %al,%eax
0x08049649 <+39>: mov %eax,0x4(%esp)
0x0804964d <+43>: movl $0x8049d66,(%esp)
0x08049654 <+50>: call 0x80487b0 <printf@plt>
=> 0x08049659 <+55>: leave
0x0804965a <+56>: ret
(gdb) p *(int*)($esp+4)
$1 = 22
如果try_ret_bool提供返回值,会保存在暂顶-1的位置