鱼C论坛

 找回密码
 立即注册
楼主: Tzdner_C

出一个题目,考验下大家。(仅限纯C语言)

  [复制链接]
发表于 2012-6-28 10:06:40 | 显示全部楼层
我是师兄 发表于 2012-6-28 10:02
另外还有东西不懂 (&s)[22]就是a了吧? 底层我菜鸟 那么直接--这个 不就足够了吗 为什么还需要对s赋值!!??

测试得到- -每次调用s,位置都会变化,所以用s保存上一次结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 10:10:12 | 显示全部楼层
莱瑞古德 发表于 2012-6-28 10:06
测试得到- -每次调用s,位置都会变化,所以用s保存上一次结果

怎么会~~~ 处理 (&s)[22] s的值不会有影响的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 10:14:48 | 显示全部楼层
本帖最后由 莱瑞古德 于 2012-6-28 10:16 编辑
我是师兄 发表于 2012-6-28 10:10
怎么会~~~ 处理 (&s)[22] s的值不会有影响的啊

回滴,每次调用s都偏移了0x58,还有貌似不应该用(&s)[22],貌似要用0x58解释,还不能解释22从何而来然后么- -我是有叫用XP的用VC6测试过,你为什么不能通过,只能说RP
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 10:20:29 | 显示全部楼层
有很多种可能 唯独没有RP
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 10:24:46 | 显示全部楼层
收拾东西,闪人,断网去,明天看邮箱的答案。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 10:27:09 | 显示全部楼层
莱瑞古德 发表于 2012-6-28 10:14
回滴,每次调用s都偏移了0x58,还有貌似不应该用(&s)[22],貌似要用0x58解释,还不能解释22从何而来然后么 ...

我说的是 s 无法影响 &s 求破
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-28 10:42:42 | 显示全部楼层
莱瑞古德 发表于 2012-6-28 10:14
回滴,每次调用s都偏移了0x58,还有貌似不应该用(&s)[22],貌似要用0x58解释,还不能解释22从何而来然后么 ...

他那个 22是直接用的两个变量的偏移量算出来的 然后用数组表示了一下、 跟你的差不多。的 数组很多时候都可以当做指针来用的   没什么稀奇的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 10:46:00 | 显示全部楼层
Tzdner_C 发表于 2012-6-28 10:42
他那个 22是直接用的两个变量的偏移量算出来的 然后用数组表示了一下、 跟你的差不多。的 数组很多时候都 ...

还是没理解那个赋值是不是多余的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 12:15:58 | 显示全部楼层
这个问题是纠结了...汇编倒好解决...关注这个问题...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-28 12:39:43 | 显示全部楼层
我是师兄 发表于 2012-6-28 10:46
还是没理解那个赋值是不是多余的

若你调试没有问题的话,去调试一下,那个赋值没有任何问题,必须赋值,因为那是个递归函数,每一次调用内存空间都会释放,原来的值将不复存在,若哪里没有赋值,照样是死循环。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-28 12:45:38 | 显示全部楼层
仰望天上的光 发表于 2012-6-28 10:02
你还没告诉我win32汇编对应的机器码有什么好的工具来查?

我有inter白皮书,要的话可以给你一份。。。我没学过32位汇编,我学汇编都是学的指令,只是为了看反汇编代码,inter白皮书上对指令的编码有好几个图,很全的。。。不过这个题目跟机器码没有关系,因为函数没有传参所以不存在add esp,XX  这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-28 12:51:16 | 显示全部楼层
仰望天上的光 发表于 2012-6-28 10:02
你还没告诉我win32汇编对应的机器码有什么好的工具来查?

靠。。这坑爹的网速。。。我回复了一次,竟然没发表出去,还不见了。。。   我有inter白皮书,你若有兴趣的话,我给你一份。。上面对机器码有详细的介绍。我没学过32位汇编语言。。。我学汇编就只学指令,只为了能看懂反汇编代码。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-28 13:26:14 | 显示全部楼层
void fun()
{
        int s;
        printf("hello word!\n");
        if( s = --*((int *)*(&s + 1) - 1))             //此处添加代码
        {
                fun();
        }
}
void main()
{
        int a=12345678;
        scanf("%d",&a);
        fun();
}
这个答案是VC6,0下的正确答案,由于我的VS安装存在问题,需重装,完了我会再发一份VS和VC通用的版本。。。。只是解题思想都是一样的,另外一种版本只是对于不同编译器对于变量的存储空间的一种特殊处理而已。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 13:44:03 | 显示全部楼层
我只能来冒冒泡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 16:24:17 | 显示全部楼层
学习学习               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-29 09:48:34 | 显示全部楼层
关注!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-29 18:29:37 | 显示全部楼层
学习了啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-29 19:41:32 | 显示全部楼层
额,来晚了,,其实罗云彬的win32汇编第3章详细讲解了函数调用约定和堆栈的情况,想不到可以用C语言的方式考察这个,开眼了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-29 20:21:02 | 显示全部楼层

汇编能实现的,C语言都基本能实现。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-29 21:06:04 | 显示全部楼层
唉,完全看不懂,果然是不行啊,求楼主及各位高手给条搞C和汇编的明路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 13:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表