从hello world 说程序运行机制
http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html
开篇
学习任何一门编程语言,都会从hello world 开始。对于一门从未接触过的语言,在短时间内我们都能用这种语言写出它的hello world。
开发平台隐藏的过程
1、从源代码到机器语言并将产生的机器语言按照一定的规律组织起来。我们暂且称为文件A。
目标文件
上图是目标文件的典型结构,实际的情况可能会有所差别,但都是在这个基础上衍生出来的。
ELF文件头:即上图中的第一个段。其中的header是目标文件的头部,里面包含了这个目标文件的一些基本信息。如该文件的版本、目标机器型号、程序入口地址等等。
a.out剖分
就和上文中描述的目标文件的格式一样,可以看出是分类存储的。目标文件被分为了6段。
从左到右,第一列(Idx Name)是段的名字,第二列(Size)是大小 ,VMA为虚拟地址,LMA为物理地址,File off是文件内的偏移。也就是这段相对于段中某一参考(一般是段起始)的距离。最后的Algn是对段属性的说明,暂时不用理会
“text”段:代码段。
“data”段:也就是上面说的数据段,保存了源代码中的数据,一般是以初始化的数据。
“bss”段:也是数据段,存放那些未初始化的数据,因为这些数据还未分配空间,所以单独存放。
“rodata”段:只读数据段,里面存放的数据是只读的。
“cmment”存放的是编译器版本信息。
剩下的两段对我们的讨论没有实际意义,就不再介绍。认为他们包含了一些链接、编译、装在的信息就可。
注:
这里的目标文件格式只是列出实际情况中主要部分。实际情况还有一些表未列出。如果你也在用Linux,可以用objdump -X 列出更详细的段内容。
深入a.out
上面部分通过实例说了目标文件中的典型的段,主要是段的信息,如大小 等相关的属性。
那么这些段里面究竟有些什么东西呢,“text”段里到底存了什么东西,还是用我们的objdump。
objdump -s a.out 通过-s选项就可以查看目标文件的十六进制格式。
查看结果如下:
上面的图中,左边是代码的十六进制形式,左边是汇编形式。对汇编熟悉的童鞋应该能看懂大部分,这里就不在多述。
d
对链接的简单认识
对装载的简单解释
小结一下
参看资料:computer systems 《windows内核分析》《程序员的自我修养》
如有转载请注明出处:http://www.cnblogs.com/yanlingyin/
一条鱼~@ 博客园 尹雁铃2012-2-12
相关文章:

爱耳日腾讯天籁行动再升级 助力100位青年听障人才打破“屏障”
公益是解决社会问题的重要切入口,科技是提升效率的强有力工具。当产业技术走入公益场景,科技也在发挥更大的社会价值。 《中国听力健康报告(2021)》显示,过度的噪音曝露,正让全球11亿年轻人面临听力受损的风…

IOS推送详解
为什么80%的码农都做不了架构师?>>> IOS推送详解 一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务…

redis(4)
redis-cli -p 6380redis-cli -p 6379 info server | grep run_idpsync ? -1

PHP也玩并发,巧用curl 并发减少后端访问时间
说明:本人源自3篇博文 http://blog.csdn.net/zuiaituantuan/article/details/7048782首先,先了解下 php中的curl多线程函数:# curl_multi_add_handle# curl_multi_close# curl_multi_exec# curl_multi_getcontent# curl_multi_info_read# cur…

ADSL自动更换IP地址源代码
有些网站限制IP地址,什么一个IP地址只能一次之类的。特别是投票网址,为了防止刷票,限制1个IP只允许投票一次! 此程序采用Vs2010C#开发,提供全部源代码!方便程序猿朋友二次开发! 可以后台运行&am…

安全隐患:神经网络可以隐藏恶意软件
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 凭借数百万和数十亿的数值参数,深度学习模型可以做到很多的事情,例如,检测照片中的对象、识别语音、生成文本以及隐藏恶意软件。加州大学圣地亚哥分校和伊利诺伊大学…

实现一个完美符合Promise/A+规范的Promise
原文在我的博客中:原文地址 如果文章对您有帮助,您的star是对我最好的鼓励~ 简要介绍:Promise允许我们通过链式调用的方式来解决“回调地狱”的问题,特别是在异步过程中,通过Promise可以保证代码的整洁性和…

用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F00,F11,FnF(n-1)F(n-2)&a…

ArrayList的内存泄露
2019独角兽企业重金招聘Python工程师标准>>> 大家先运行下下面这段代码,看看结果 public class MemoryLeak {public static void main(String[] args) throws InterruptedException {new Thread(new Runnable() {Overridepublic void run() {for (int i …

给 Python 初学者推荐的 IDE 哦!
作者 | 黄伟呢来源 | 数据分析与统计学之美总有一些Python初学者,会问到:学习Python,应该用什么Python IDE?了解到他们使用Python做什么之后,我总结了这篇文章。IDE是集成开发环境的缩写,通俗地说ÿ…

django 2.0路由配置变化
urlpatterns变量的语法 urlpatterns应该是path()和/或re_path()实例的Python列表。 首先,Django会使用根路由解析模块(root URLconf)来解析路由。 通常,这是ROOT_URLCONF设置的值,但是如果传入的HttpRequest对象具有urlconf属性ÿ…

用ext_skel,实现一个PHP扩展,添加到PHP并调用
http://www.shinrun.com/PHP 一、开始之前 1. 系统环境:FreeBSD 8.22. AP环境:即已经装好的Apache2.2.17、PHP5.3.8环境3. PHP源码:下载稳定版本源码到当前用户的目录,如,下载PHP 5.3.8到/usr/home/abc下。4. 其它要求…

关于第三方IOS的checkBox框架的使用
关于第三方IOS的checkBox框架的使用 这个框架是从github上下载获取的:M13Checkbox。 只是github的源码项目工程比较久远,所以我把代码部分拷贝到XCode 7.1.0新建的项目里。 下面是展示效果 客户端源码使用参考: 1 #import "ViewControll…

20 个 Pandas 数据实战案例,干货多多
作者 | 俊欣来源 | 关于数据分析与可视化今天我们讲一下pandas当中的数据过滤内容,小编之前也写过也一篇相类似的文章,但是是基于文本数据的过滤,大家有兴趣也可以去查阅一下。下面小编会给出大概20个案例来详细说明数据过滤的方法࿰…

Python创建和访问字典
>>> dict1 {a:1,b:2,c:3,d:4}>>> print(a的值是:,dict1[a])a的值是: 1>>> dict4 dict(我 快乐, 你 伤悲)SyntaxError: keyword cant be an expression>>> dict4[你] 改变悲伤>>> dict4{我: 快乐, 你: 改变悲伤}>>>…

C语言九阴真经
发现记忆力越来越差,所以干脆搞这么一个东西,就是把C语言的最常用的语法汇编在一起,不断完善。这样以后只要经常把这个回顾一下就可以了。不然去翻书太多了。。。f.h#define Area 1000 struct student{char *last_name;int student_id;char …

听障人士的“有声桥梁”:百度智能云曦灵-AI手语平台发布
在刚刚落幕的冰雪赛事中,百度智能云曦灵为央视新闻打造的AI手语主播正式上岗,她以流畅、专业的手语服务实时传递冰雪运动的激情。然而在日常生活中,听障人士想要方便地获取信息仍面临着众多困难,无障碍窗口稀缺的问题亟待解决。 …

模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
模拟实现:strstrstrcpystrlenstrcatstrcmpmemcpymemmove1 strstr 字符串中查找子字符串char * my_strstr(const char *dest, const char *src) {const char *ret dest;const char *p dest;const char *q src;assert(dest ! NULL && src ! NULL); while(r…

【Spring Security】五、自定义过滤器
在之前的几篇security教程中,资源和所对应的权限都是在xml中进行配置的,也就在http标签中配置intercept-url,试想要是配置的对象不多,那还好,但是平常实际开发中都往往是非常多的资源和权限对应,而且写在配…

一星期没完成Ansible任务
这个星期,前4天,我在看Nginx,没有深入Ansible。 这几天我有思考做Ansible的哪个方面,现在我用Ansible可以用,但是没有生产环境,我对基础部分热情不是特别大,应该是基础部分大家在弄,…

Python 批量处理 Excel 数据后,导入 SQL Server
作者 | 老表来源 | 简说Python1、前言2、开始动手动脑2.1 拆解明确需求2.2 安装第三方包2.3 读取excel数据2.4 特殊数据数据处理2.5 其他需求2.6 完整调用代码1、前言今天教大家一个需求:有很多Excel,需要批量处理,然后存入不同的数据表中。2…

最经典的计算机网络新书推荐--计算机网络(第5版)Tanenbaum著中文版上市
作者:Tanenbaum是全球最著名的计算机科学家。linux之父Linus当年就是参考Tanenbaum写的MINIX! Tanenbaum《计算机网络(第5版) 》《现代操作系统(第3版) 》《操作系统设计与实现(第3版) 》《分布式系统原理与范型(第2版) 》《计算机组成结构化方法&#x…

elasticsearch简单操作(二)
让我们建立一个员工目录,假设我们刚好在Megacorp工作,这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录用于促进人文关怀和用于实时协同工作,所以它有以下不同的需求:1、数据能够包含多个值的标签、数…

苹果放大招?「廉价版」5G iPhone 将揭晓,M2芯片来袭?
整理 | 张洁来源 | CSDN3 月 2 日,苹果公司正式宣布将于北京时间 3 月 9 日凌晨 2 点举办 2022 年的首场活动,主题为“peek performance(高能传送)”。与去年一样,苹果 2022 年的第一场活动将继续以线上的方式进行。活…

PHP 预编译加速: eAccelerator的安装和性能比较
eAccelerator已经是很常用的PHP平台预编译加速的手段了。今天在自己机器上尝试安装了一下,备忘如下: 获得源代码:http://bart.eaccelerator.net/source/编译:需要有autoconf支持,解包后在源程序目录下:/usr…

合并区间(LintCode)
合并区间 给出若干闭合区间,合并所有重叠的部分。 样例 给出的区间列表 > 合并后的区间列表: [ [[1, 3], [1, 6],[2, 6], > [8, 10],[8, 10], [15, 18][15, 18] ] ]挑战 O(…

Kylin集群部署和cube使用
Kylin集群部署和cube使用 安装集群环境节点 Kylin节点模式 Ip 内存 磁盘Node1 All 192.167.71.11 2G 80GNode2 query 192.168.71.12 1.5G 80GNode3 query 192.168.71.13 1.5G 80GKylin工作原理如下: 集群时间同步Ntp服务自行设置安装kylin之前所需要的环境Hadoop-2.…

就是个控制结构,Scala 能有什么新花样呢?
作者 | luanhz来源 | 小数志导读编程语言中最为基础的一个概念是控制结构,几乎任何代码都无时无刻不涉及到,其实也就无外乎3种:顺序、分支和循环。本文就来介绍Scala中控制结构,主要是分支和循环。Scala中的控制结构实质上与其他编…

快速开发一个PHP扩展
快速开发一个PHP扩展 作者:heiyeluren时间:2008-12-5博客:http://blog.csdn.net/heiyeshuwu 本文通过非常快速的方式讲解了如何制作一个PHP 5.2 环境的扩展(PHP Extension),希望能够在图文的方式下让想快速…

oracle11g的安装
目录层次:linux->oracle软件->dbca数据库安装过程:虚拟机->linux->VMtools->拷贝数据库软件->创建一个目录mkdir->创建组.用户->修改根目录->设置参数->解压 >安装->oracle完成参考:安装oracle软件linu…