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
如果try_ret_bool提供返回值,会保存在暂顶+4的位置,一个指针偏移量,返回给eax寄存器作为最终返回值提供给printf进行格式化
所以,如果你不提供return返回值,$esp+4的位置就根据代码段解析的情况来取值。
但我不清楚
movzbl %al,%eax
movl $0x8049d66,(%esp)
的意思,需要后续再研究,大牛看到的可以帮我解答下