#include <stdio.h>

int main(int argc, char* argv[], char* env[])
{
printf("Hello World\n"); return ;
}

①main函数原型: int main(int argc, char* argv[], char* env)

②mian函数返回值:

main函数的返回值是返回给父进程的,父进程调用下面函数来获取进程的退出码

pid_t wait(int* status);

pid_t waitpid(pid_t pid, int* status, int options);

main函数返回值存储于status

③被隐藏的细节:

用strace命令(显示所有由用户空间程序发出的系统调用)跟踪Helloworld的执行过程(strace ./HelloWorld),发现其有数十次的系统调用。

真正的打印字符串调用

write(1, "Hello World\n", 12Hello World)           = 12

把字符串写入文件描述符为1的文件里

在Linux系统中,

(1) 标准输入的文件描述符为0

(2) 标准输出的文件描述符为1

(3) 标准错误输出的文件描述符为2

④printf不见了

查看main函数汇编代码, 发现printf函数不见了(Gcc做了优化)

int main()
{
80483b4: push %ebp
80483b5: e5 mov %esp,%ebp
80483b7: e4 f0 and $0xfffffff0,%esp
80483ba: ec sub $0x10,%esp
printf("Hello World\n");
80483bd: c7 movl $0x8048494,(%esp)
80483c4: e8 ff ff ff call 80482f0 <puts@plt> return ;
80483c9: b8 mov $0x0,%eax
}

⑤链接了哪些共享库

用ldd命令查看HelloWorld链接的共享库

linux-gate.so.1 =>  (0x005aa000)
 libc.so.6 => /lib/libc.so.6 (0x00278000)
 /lib/ld-linux.so.2 (0x00252000)

libc.so.6是glibc,他实现了像printf之类函数

/lib/ld-linux.so.2是ELF可执行文件解析器

/lib/ld-linux.so.2主要功能是加速系统调用(syscall)

⑥调用共享库中的函数

⑦函数解析过程

⑧偷梁换柱

⑨内存模型

⑩main函数不是第一个执行的函数

Hello World 十大秘密的更多相关文章

  1. TCP/IP中你不得不知的十大秘密

    这段时间 有一点心很浮躁,不过希望自己马上要矫正过来.好好学习编程!这段时间我想好好地研究一下TCP/IP协议和网络传输这块!加油 一.TCP/IP模型 TCP/IP协议模型(Transmission ...

  2. Google十大惊人产品

    国外资讯网站BusinessInsider刊文细数了谷歌惊世骇俗的十大产品,范围从无人驾驶汽车到太空电梯再到高空风力发电,每一项都令人无限神往,充满未来感. 以下是谷歌十大惊人产品: 众所周知,谷歌并 ...

  3. 网络营销行业十大看了就想吐的“滥词”

    网络营销行业在国内的互联网界已"猖獗"数年之久,它是一个让企业爱让用户恨的行业.有互联网的地方,就有网络营销的机会,有了机会就有了相关产业的存在,只不过是业大业小的问题.但是随着互 ...

  4. 新版.Net开发必备十大工具(转)

    Snippet Compiler Snippet Compiler是一个基于 Windows 的小型应用程序,你可以通过它来编写.编译和运行代码.如果你具有较小的代码段,并且你不想创建完整的 Visu ...

  5. Spring常犯的十大错误,你踩过吗?

    1.错误一:太过关注底层 我们正在解决这个常见错误,是因为 "非我所创" 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状. 虽然理解特定库的 ...

  6. 【十大经典数据挖掘算法】PageRank

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...

  7. 【十大经典数据挖掘算法】EM

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...

  8. 【十大经典数据挖掘算法】AdaBoost

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...

  9. 【十大经典数据挖掘算法】SVM

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector ...

随机推荐

  1. 关于contentprovider的几个问题

    说说ContentProvider与Android数据存储的关系? contentprovider是程序之间共享数据的唯一方式,android中没有公共数据区域的说法,每个进程启动都是不同的用户,与P ...

  2. URL操作

    ThinkPHP 的 URL 操作.主要涉及到 URL 路径大小写.伪静态.生成以及模版中的 U()方法. 一.URL大小写 系统默认的规范是根据 URL 里面的模块名.控制器名来定位到具体的控制器类 ...

  3. Java-马士兵设计模式学习笔记-迭代器模式-模仿Collectin ArrayList LinckedList

    Java Iterator模式 Java Iterator模式, 模仿Collectin ArrayList LinckedList 一.有如下几个类 1.接口Collection.java 2.接口 ...

  4. iOS Simulator hang up ( Xcode4.6.3)

    最近遇见个Xcode的bug,搞的十分郁闷. 具体现象是:程序前段时间都是好好的,可以运行,第二天开机,调试就无法进入模拟器.就连main()函数都进不了.模拟器完全挂起了.具体说来就是代码一句都没改 ...

  5. HTML相关知识和经验的碎片化记录

    1.标签input在type="file"时,name是必须属性 <form id="MainFileUpload" name="MainFil ...

  6. jdbc--1 一些方法的封装

    今日内容介绍1.JDBC2.DBUtils====================================================================1 JDBC概念和数据 ...

  7. python 根据字典中的key,value进行排序

    #coding=utf-8 import requests,json,collections,base64,datetime def sort(datas): data=json.dumps(data ...

  8. arcgis调用国家天地图wfs服务

    1.国家天地图wfs地址 getcapabilities http://www.tianditu.com/wfssearch.shtml?request=getcapabilities&ser ...

  9. Linux下管理员强行踢出用户的命令使用方法

    Linux强制踢出用户命令: 一.输入w命令查看已登录用户信息 [root@KW_S01_192.168.1.106_A ~]# w 19:22:31 up  2:11,  3 users,  loa ...

  10. @RequestMapping与@ModelAttribute 套路

    新接触一个项目,使用了大量注解: 在通过请求路径查看时一直找不到页面的跳转,再查看了文件内所有方法与注解后才找到对应的路径,特此记下: @ModelAttribute("totalfinal ...