牛人专题
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.
不过有变量的增加就会麻烦些。