-
-
[旧帖] [讨论]返回地址被覆盖 0.00雪花
-
发表于: 2009-8-5 15:34 929
-
原帖链接:http://bbs.pediy.com/showthread.php?t=94975
在以上链接中有一道c语言的测试题:
1、如何在下面的test函数里加入代码可以使程序运行起来输入和输出的相等?
(环境是vc6Debug方式下)
#include<stdio.h>
void test()
{
int t;
scanf("%d",&t);
在这里加入代码
}
void main()
{
int m;
test();
printf("m=%d",m);
}
楼主当时发问:
在这里我有两个疑问想请教各位大牛:(vs2008 DeBug)
1.函数入口处sub esp,0CCh和 sub esp,0D8h 指令中的CC和D8和怎么计算出来的,保留这空间是做什么用途的?
2.我添加完代码之后可以把m的值置成我输入的值了,但怎么样才能消除“使用未初始化变量”的错误?
谢谢各位!
对于第一个问题,小弟认为他的ESP指针的作用是覆盖主函数的返回地址,因此在最后显示的值实际不是m的值,而是t的值,此时m与t仍然是不相等的,只要esp的值够大,便可以使程序发生错误,使得显示的值停留在t上,也就是用esp指针使程序发错误,显示的值是因为错误而停留在屏幕上的,而不是m的值,也不知道能不能这么理解,请明白的给说一下··另外哪位可以给个邀请码吗···
在以上链接中有一道c语言的测试题:
1、如何在下面的test函数里加入代码可以使程序运行起来输入和输出的相等?
(环境是vc6Debug方式下)
#include<stdio.h>
void test()
{
int t;
scanf("%d",&t);
在这里加入代码
}
void main()
{
int m;
test();
printf("m=%d",m);
}
楼主当时发问:
在这里我有两个疑问想请教各位大牛:(vs2008 DeBug)
1.函数入口处sub esp,0CCh和 sub esp,0D8h 指令中的CC和D8和怎么计算出来的,保留这空间是做什么用途的?
2.我添加完代码之后可以把m的值置成我输入的值了,但怎么样才能消除“使用未初始化变量”的错误?
谢谢各位!
对于第一个问题,小弟认为他的ESP指针的作用是覆盖主函数的返回地址,因此在最后显示的值实际不是m的值,而是t的值,此时m与t仍然是不相等的,只要esp的值够大,便可以使程序发生错误,使得显示的值停留在t上,也就是用esp指针使程序发错误,显示的值是因为错误而停留在屏幕上的,而不是m的值,也不知道能不能这么理解,请明白的给说一下··另外哪位可以给个邀请码吗···
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [求助]考研的困惑 2424
- [讨论]返回地址被覆盖 930
- [求助]去掉windows内存保护 1789
- [讨论][讨论][原创]菜鸟某款G的猜想和分析 1044
- [原创]菜鸟某款G的猜想和分析 1385
看原图
赞赏
雪币:
留言: