#include
#include
using namespace std;
typedef unsigned int DWORD;
typedef unsigned short int WORD;
typedef DWORD (*a)(int );
int mm()
{
return -1;
}
WORD hello(int i)
{
mm();
return 300;
}
void main()
{
DWORD m;
a func;
func=(a)hello;
m=(*func)(10);
cout<
}
由于调用mm()函数改写了当时的eax值,使之为-1,当hello中的return被之行时,由于返回short类型,所以ax的值被更改。使得此时是ax中保存了返回值,eax中是一个错误的值。
有由于func在赋值时被强行转化,导致在m被赋值时,得到的是eax的内容。所以m此时的值不是hello所返回的值。
以上是从vc的汇编代码中看到的,但是linux下的g++都会进行转化,m仍能够得到正确的值。
阅读(1037) | 评论(0) | 转发(1) |