关于C语言链接,深入理解计算机系统里的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于C语言链接,深入理解计算机系统里的问题

2016-05-27 19:27:55 1768 1
/* foo6.c */
void p2(void)

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

 /* bar6.c */
#include <stdio.h>

char main;

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

当在linux系统中编译执行这个程序时,即使p2不初始化变量main,它也能打印字符串“0x55n”并正常终止。
答案上说:连接器会把bar6.c中的main引用为foo6.c中的main,是main函数第一个字节的地址,由于main函数指令第一条指令是pushl %ebp,这条指令的编码就是0x55。
我的问题是:main是一个地址,那么打印出来的应该是地址值啊,为什么会打印出地址内的字节值呢?

取消 提交回答
全部回答(1)
  • 杨冬芳
    2019-07-17 19:18:40

    这里之所以链接成功,是因为C在链接时不会校验链接的签名,所以是可以链接成功的,但bar6.c 中声明的main原型为char main, 而不是extern int (main)(int, const char *);
    用后面这种方式的时候,才是打印的是main的地址。

    0 0
相关问答

30

回答

云计算之路:为什么要选择云计算

cnblogs 2013-03-27 10:22:27 144906浏览量 回答数 30

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 233876浏览量 回答数 170

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 160019浏览量 回答数 145

24

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 660526浏览量 回答数 24

39

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 263653浏览量 回答数 39

295

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 438468浏览量 回答数 295

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 310348浏览量 回答数 251

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 125081浏览量 回答数 97

40

回答

阿里云ecs从购买到环境搭建和建站!!(phpstudy一件包)

梦丫头 2014-07-29 20:51:49 164100浏览量 回答数 40

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 486143浏览量 回答数 24
+关注
杨冬芳
IT从业
1
文章
9167
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载