论坛首页 招聘求职论坛

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

浏览 13040 次
精华帖 (0) :: 良好帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-08  
大爷你这个方法比较巧妙的一B。     
raojl 写道
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;

见附件!
图例

 

 

0 请登录后投票
   发表时间:2011-12-08  
liwenshui322 写道
C语言 我已经不认识它了,还加上了汇编....


我也已经快2年没碰过了
0 请登录后投票
   发表时间:2011-12-08  
kimmking 写道
楼下有人debug出来了。。。
其实我在想有没有走 编译参数 的路子。。。

符合C语法规则的商用编译器,一般没这种参数吧。
0 请登录后投票
   发表时间:2011-12-08  
C里面写汇编...第一次见....围观一下..
0 请登录后投票
   发表时间:2011-12-08  
用c直接操作地址
0 请登录后投票
   发表时间:2011-12-08  
楼主的描述有些问题吧?如果代码不变的话,const 类型变量的值是不会变化的,前几楼的答案准确的说应该是“打印出”符合要求的结果。
所以仍然是那句话,不明白楼主的意思啊。。。。
0 请登录后投票
   发表时间:2011-12-08  
还有汇编,混在一起,还真没玩过
0 请登录后投票
   发表时间:2011-12-08  
巧克力饼干 写道
楼主的描述有些问题吧?如果代码不变的话,const 类型变量的值是不会变化的,前几楼的答案准确的说应该是“打印出”符合要求的结果。
所以仍然是那句话,不明白楼主的意思啊。。。。



不修改源码的基础上如何做到  修改i的值
其他任何方法都没限定 (自己弄个简单调试器运行该进程啊、修改CPU页属性之类的啊。。。。、)
这个还不清楚啊。。。。。。
当然LS的一位是用了取巧的方法。
0 请登录后投票
   发表时间:2011-12-08   最后修改:2011-12-08
记得一次去面试 题目是 让你用你熟悉的方法 给一个数组排序
我就直接这么写了
 a=[1,2,3,4,5,.....]
 a.sort()
0 请登录后投票
   发表时间:2011-12-08  
pxs623 写道
我以为是脑筋急转弯 换个编译器什么的。。。

人才啊,各种人才。
0 请登录后投票
论坛首页 招聘求职版

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