免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 紫牧
打印 上一主题 下一主题

[函数] 一个面试题,说是考函数调用方式 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2007-09-09 11:09 |只看该作者
    _asm{
        push        eax
        push        ebx
        mov         eax,[ebp]
        lea         ebx,[ebp-4]
        mov         ebx,[ebx]
        mov         [eax-4],ebx
        pop         ebx
        pop         eax
    }

这样子能做到编译器无关么?

[ 本帖最后由 紫牧 于 2007-9-9 11:12 编辑 ]

论坛徽章:
0
42 [报告]
发表于 2007-09-09 11:35 |只看该作者
原帖由 紫牧 于 2007-9-9 11:09 发表
    _asm{
        push        eax
        push        ebx
        mov         eax,[ebp]
        lea         ebx,[ebp-4]
        mov         ebx,[ebx]
        mov         [eax-4],ebx
       ...


这段代码依赖于编译器的实现
并不能确保 m 位置就等于 calling 栈中的 [ebp - 4]

论坛徽章:
0
43 [报告]
发表于 2007-09-09 11:38 |只看该作者
楼主的意思是希望用纯C的方法去解决这个问题,但是俺是看不出来什么希望了,帮顶~~:wink: :wink: :wink:

论坛徽章:
0
44 [报告]
发表于 2007-09-09 11:44 |只看该作者
偶说的方法,用C可以做呀

论坛徽章:
0
45 [报告]
发表于 2007-09-09 11:48 |只看该作者
原帖由 mik 于 2007-9-9 11:44 发表
偶说的方法,用C可以做呀





示范下啊大哥,我是没想出来不用汇编怎么得倒ebp-4来

论坛徽章:
0
46 [报告]
发表于 2007-09-09 12:46 |只看该作者
原帖由 mik 于 2007-9-9 11:44 发表
偶说的方法,用C可以做呀

能给出代码来么,我实在是做不出来

论坛徽章:
0
47 [报告]
发表于 2007-09-09 13:23 |只看该作者
想不通吖;按照紫牧给出的代码格式,在test()里获取main()中m的地址进行操作。
期待mik大哥的code.

论坛徽章:
0
48 [报告]
发表于 2007-09-09 13:34 |只看该作者
原帖由 Cyg07 于 2007-9-9 13:23 发表
想不通吖;按照紫牧给出的代码格式,在test()里获取main()中m的地址进行操作。
期待mik大哥的code.


同待,同待

论坛徽章:
0
49 [报告]
发表于 2007-09-10 12:32 |只看该作者
原帖由 3040602024 于 2007-9-8 11:59 发表
#include
void test()
{
    int t;
    scanf("%d",&t);

    printf("%d",t);
exit(-1);
}

main()
{
    int m;

    test();
    printf("%d",m);
}


如果这题是面试的题目,这个是最佳答案! 如果一些大学里的老学究去研究一下怎么改变m的值还可以理解。
不会有哪个程序会非要用这种函数调用。再说也没有一个portable的方式来实现。
怀疑那个公司是不是真的要程序员,还是应聘的人太多故意刁难?
cai_bird 该用户已被删除
50 [报告]
发表于 2007-09-10 13:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP