免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2021 | 回复: 7
打印 上一主题 下一主题

请教一道题目 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-06 21:55 |只看该作者 |倒序浏览
/* bar6.c */
#include <stdio.h>

char main;

void p2(){
        printf("0x%x\n",main);
}


/*foo6.c*/
void p2(void);

int main(){
        p2();
        return 1;
}


编译执行,为何打印0x55 呢?

题目是《深入理解计算机系统》书后习题

论坛徽章:
1
15-16赛季CBA联赛之吉林
日期:2018-05-23 14:31:12
2 [报告]
发表于 2007-09-06 22:09 |只看该作者

回复 #1 baoaabao 的帖子

在gcc 3.4.6 里编译这个程序是错误的

warning: 'main' is usually a function
warning: prototype for 'p2' follows non-prototype definition
error: 'main' redeclared as different kind of symbol
error: previous declaration of 'main' was here

论坛徽章:
0
3 [报告]
发表于 2007-09-06 22:14 |只看该作者
printf了*(&main), 这里的main是指main函数

原帖由 baoaabao 于 2007-9-6 21:55 发表
/* bar6.c */
#include

char main;

void p2(){
        printf("0x%x\n",main);
}


/*foo6.c*/
void p2(void);

int main(){
        p2();
        return 1;
}


编译执行,为何打印0 ...

[ 本帖最后由 ypxing 于 2007-9-6 22:20 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-09-06 22:51 |只看该作者

回复 #3 ypxing 的帖子

是指main指针值么,在我机子上main=0x401050,
小端表示,第一个字节也应该是0x50阿....

论坛徽章:
0
5 [报告]
发表于 2007-09-06 22:54 |只看该作者
如果0x401050是main函数的地址的话
会打印*(int*)0x401050

原帖由 baoaabao 于 2007-9-6 22:51 发表
是指main指针值么,在我机子上main=0x401050,
小端表示,第一个字节也应该是0x50阿....

论坛徽章:
0
6 [报告]
发表于 2007-09-07 10:49 |只看该作者

回复 #5 ypxing 的帖子

thx.i see
55 实际是指push 指令

未链接时,查看bar6.o,有movsbl 0x0,%eax //0x0是未解析的main符号
链接后,disassemble, 变为 movsbl 0x401050 ,%eax //0x401050 为main的入口地址值,这里做了间址,由于是小端表示,就取出了main第一条指令码,push %ebp --------55

论坛徽章:
0
7 [报告]
发表于 2007-09-07 11:14 |只看该作者
原帖由 gtuiw 于 2007-9-6 22:09 发表
在gcc 3.4.6 里编译这个程序是错误的

warning: 'main' is usually a function
warning: prototype for 'p2' follows non-prototype definition
error: 'main' redeclared as different kind of symbol
er ...

i'm so.

论坛徽章:
0
8 [报告]
发表于 2007-09-07 11:18 |只看该作者
这是两个源文件

原帖由 ruoyisiyu 于 2007-9-7 11:14 发表

i'm so.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP