论坛首页 招聘求职论坛

神奇的面试题, 好玩的很。有能力的看看

浏览 13043 次
精华帖 (0) :: 良好帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-07  
巧克力饼干 写道
刚测试了下,const的值确实改了,但是用的时候仍然是原来的值。。。估计const类型在编译后会将值存放在其他位置进行使用,C估计是解决不了这个问题了
k和i的地址完全相同,但是打印出来的结果却不一样。


测试 ?在不能修改源码的情况下
0 请登录后投票
   发表时间:2011-12-07  
cttnbcj 写道
巧克力饼干 写道
const的值确实能改,不过不太明白什么叫“不改变源码的情况下如何做到?”

就是不能修改上面的代码


意思是上面的不能改,自己新增一部分代码?
还是说一个空格都不能改?
0 请登录后投票
   发表时间:2011-12-07  
巧克力饼干 写道
cttnbcj 写道
巧克力饼干 写道
const的值确实能改,不过不太明白什么叫“不改变源码的情况下如何做到?”

就是不能修改上面的代码


意思是上面的不能改,自己新增一部分代码?
还是说一个空格都不能改?

不能修改增加任何代码
0 请登录后投票
   发表时间:2011-12-07   最后修改:2011-12-07
cttnbcj 写道
巧克力饼干 写道
cttnbcj 写道
巧克力饼干 写道
const的值确实能改,不过不太明白什么叫“不改变源码的情况下如何做到?”

就是不能修改上面的代码


意思是上面的不能改,自己新增一部分代码?
还是说一个空格都不能改?

不能修改增加任何代码

在debug时候改
0 请登录后投票
   发表时间:2011-12-07  
C语言 我已经不认识它了,还加上了汇编....
0 请登录后投票
   发表时间:2011-12-07  
这个代码直接运行还是不行的,
强制运行会指针非法访问报错。
汇编部分只是用了两个寄存器而已,
如果const去掉就能通过的。
0 请登录后投票
   发表时间:2011-12-07   最后修改:2011-12-07
楼下有人debug出来了。。。
其实我在想有没有走 编译参数 的路子。。。
0 请登录后投票
   发表时间:2011-12-07   最后修改:2011-12-07
raojl 写道
这个代码直接运行还是不行的,
强制运行会指针非法访问报错。
汇编部分只是用了两个寄存器而已,
如果const去掉就能通过的。



这题目出了也太恶心,终于被我搞出来,他主要考察vc的调试功底。

首先我用debug模式下变量修改器修改了i的值。
i =32;//注意通过i的地址去修改他的变量,而不是直接复制修改。

实际运行mov  dword ptr [eax],ebx 是会报错的。
因为eax 这个寄存器(存了个地址)如果指向i的地址的化肯定会非法的。
但是我发现c这个变量不是const变量,可以修改。我运行&c 找到它的地址。
同时修改eax 的内容为c变量的地址。
这时mov  dword ptr [eax],ebx 可以安全运行,闯过这关。
最好i 打印的值为 i= 32;

见附件!
图例

 

  • 大小: 140.2 KB
0 请登录后投票
   发表时间:2011-12-07  
看不懂啦  迷糊。。
0 请登录后投票
   发表时间:2011-12-08  
我以为是脑筋急转弯 换个编译器什么的。。。
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics