第一部分
画出程序流程图,写出源程序清单及主要的反汇编代码。
I:程序流程图
II:源程序清单
#include "stdio.h"
int swap(int x,int y){
if(x>y)
return x;
else
return y;
}
int main()
{
char *z="computer";
int temp1=125;
int temp2=80;
int a=swap(temp1,temp2);
return a;
}
III:主要的反汇编代码
第二部分
参照第四部分操作范例写出反汇编单步调试的过程及重要窗口截图(如栈窗口等),并对每步相应执行结果进行分析(主要分析栈指针和帧指针的状态和含义、栈帧中数据的变化、数据的机器级表示与真值的对应关系、 程序的机器表示与 C 代码的对应关系等)。
I:准备
II:分配局部变量
由图可知:7D为立即数125,50为立即数80
III:准备入口参数
将两个立即数存入EAX中,随后将其压入栈内。如上图所示
IV:调用max函数
执行max函数体(其中包含了准备阶段)
V:将max返回的结果存入EAX中,然后结束程序
7D为立即数125,故符合逻辑。
第三部分
画出 main 函数的栈帧结构。
结束语
如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!