#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. C# 设置程序session过期时间

    服务器设置: 如果服务器上点击站点没有ASP这一项: 下方 角色服务 添加角色服务 安装完毕重新打开iis 点击站点 就可以看到ASP这个选项了 程序webconfig配置: <system.w ...

  2. Win10 VS2013 PCL1.8.1和依赖项VTK8.0.1, QHuall(2.15.2), FLANN1.9.1,Boost1.59.0,Zbil1.2.11和libPNG1.6.34编译安装

    编译和安装过程最好使用管理员权限去操作,避免不必要的错误. 一般而言为了区分Debug和Release库,添加输入变量 Name: CMAKE_DEBUG_POSTFIX Type: STRING V ...

  3. 树莓派研究笔记(8)-- 编译lakka v2.1源码

    Lakka越玩越觉得强大.如果要是能自己修改一下代码,实现自定义的一些操作就更好了.还可以修复字体文件,修复在部分机器上自动更换Mac地址导致ip变化的问题. 所以我们来尝试编译这个系统.这篇文章几乎 ...

  4. Entity Framework Tutorial Basics(8):Types of Entity in Entity Framework

    Types of Entity in Entity Framework: We created EDM for existing database in the previous section. A ...

  5. UCOSIII优先级

    优先级 0:中断服务管理任务 OS_IntQTask() 优先级 1:时钟节拍任务        OS_TickTask()   滴答定时器任务 优先级 2:定时任务               OS ...

  6. Gym - 100792C Colder-Hotter(三分交互)

    Colder-Hotter Statements This is an interactive problem. Egor and Petr are playing a game called «Co ...

  7. Vue2.0学习--Vue数据通信详解

    一.前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.组件间如何传递数据就显得至关重要.本文尽可能罗列出一些常见的数据传递方式,如p ...

  8. AngularJs 指令 directive中link,controller 的区别

    其实严格来讲,link和controller是完全不同的概念,这里讲区别有点牵强. angular指令中,带有link和controller两个函数,很多人在写指令的时候不知道是写在link里 还是c ...

  9. UVa_Live 3664(精度坑)

    题意很好理解的贪心题,然而却卡疯了的精度坑. 再次理解一下double小数运算时可能导致的精度问题,本题为避免该问题可以将小数乘以100化为整数进行比较,输出的时候再除以100就ok: 思路也很好想, ...

  10. 《图解HTTP》阅读笔记--第十一章针对web的攻击技术

    第十一章.针对WEB的攻击技术 ----<图解HTTP>阅读笔记攻击目标---Web简单的HTTP协议本身并不存在安全性 问题,协议本身并不会成为被攻击的对象,应用HTTP的服务器和客户端 ...