|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int a(int n)
{
int p;
if(n==2)
{
return n;
}
else
{
a(n-1);
p=n*n;
}
}
int main(int argc, char const *argv[])
{
/* code */
printf("%d\n",a(5) );
return 0;
}
这个返回值是多少呢?
本帖最后由 Croper 于 2019-3-9 14:16 编辑
部分反汇编的结果:
- #include <stdio.h>
- int a(int n)
- {
- int p;
- if(n==2)
- {
- return n;
- }
- else
- {
- a(n-1);
- p=n*n;
- //这是最后一次使用eax寄存器的位置
- //01101814 mov eax,dword ptr [n] //把n的值放入eax寄存器,此时eax=5
- //01101817 imul eax,dword ptr [n] //eax寄存器的乘上n的值,此时eax=25
- //0110181B mov dword ptr [p],eax //把eax寄存器的值放入p,此时p=25,eax=25;
- }
- }
- int main(int argc, char const *argv[])
- {
- /* code */
- printf("%d\n",a(5) );
- //01101988 push 5
- //0110198A call a (01101217h) //这是调用函数a,返回后eax=25
- //0110198F add esp,4
- //01101992 push eax //把eax当做a()的返回值推入栈,此时eax=25
- //01101993 push offset string "%d\n" (01107B30h)
- //01101998 call _printf (0110104Bh) //调用printf,此时输出的值当然是25
- //0110199D add esp,8
- return 0;
- }
复制代码
|
|