首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

牛人专题解决办法

2012-03-02 
牛人专题voidmain(){intm0v()}voidv(){intt10.................}要求不管t等于多少。m都要等于t而且只

牛人专题
void     main(){
int   m=0;
v();
}
void   v(){
int   t=10;
.................
}
要求不管t等于多少。m都要等于t
而且只能在........那里写代码实现

[解决办法]
这个题目,除了使用强行地址越界的方法外,我想不出更好的办法。而且地址越界这种方法依赖于编译器。下面是我在vs2005+xp下的debug版程序:
void v()
{
int t = 10;
*( &t + 56) = t;
}

void main()
{
int m = 0;
v();

}
不知道其他大侠有没有更好的方法
[解决办法]
如果对编译器的编译方式是可以写出来的。
比如你采用TC2来编译。
那么main开始
push bp
mov bp,sp
sub sp,2;此处会留出你的变量的空间。
mov word ptr [bp-02],0000
call v;调用v函数,此时会入栈IP。
v函数的开始
push bp
mov bp,sp
sub sp,2;此处会留出你的变量的空间。
mov word ptr [bp-02],000A;10的16进制就是A
...
所以你可以根据你的t变量的地址,推算出主函数的m的位置。

m的地址-t的地址=6.

不过有变量的增加就会麻烦些。

热点排行