[OS] 可执行文件的装载】的更多相关文章

http://www.jianshu.com/p/e1300e7a4c48 1. 虚拟内存 在早期的计算机中,程序是直接运行在物理内存上的,程序在运行时访问的地址就是物理地址.可是,当计算机中同时运行多个程序时,就会有很多问题. 假设我们计算有128MB内存,程序A需要10MB,程序B需要100MB,程序C需要20MB.如果我们需要同时运行程序A和B,那么比较直接的做法是将内存的前10MB分配给程序A,10MB~110MB分配给B.但这样做,地址空间不隔离,内存使用效率低,程序运行的地址不确定.…
潘恒 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 1.预处理.编译和链接 实践 ELF头部在文件的开始,描述文件的总体格式,保存了路线图,描述该文件的组织情况,即生成该文件系统的字的大小和字节顺序 段头部表用来描述ELF可执行文件与连续的存储段之间的映射关系.节头表包含了描述文件节区的信息,每个节区在表中都有一个项,给出节区的名称.节区大小这类心里.用于链接的目标文件(…
http://hi.baidu.com/xiaole10368/item/7cea9b1369cc240db88a1a5c 少优化->多优化: O0 -->> O1 -->> O2 -->> O3 -O0表示没有优化,-O1为缺省值,-O3优化级别最高 英文解析: `-O ' `-O1 '                 Optimize.      Optimizing   compilation   takes   somewhat   more   time…
第七周.可执行程序的装载 一.可执行程序是如何产生的? (1).c文件gcc汇编形成.s和.asm汇编代码: (2)汇编代码经过gas变成.o目标文件: (3)目标文件变成可执行文件: (4)可执行文件loader之后存储. 预处理:gcc –E –o hello.cpp hello.c –m32 编译:gcc –x cpp-output –S –o hello.s hello.cpp –m32 //编译为汇编代码 gcc –x assembler –c hello.s –o hello.o –…
Linux第七周学习总结--可执行程序的装载 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.预处理.编译.链接和目标文件的格式 1.可执行程序怎么来的 过程:先预处理.cpp,在编译成汇编代码.s到目标代码.o,再链接成可执行文件,加载到内存中执行. 预处理.c文件,预处理负责把include的文件包含进来及宏替换等工作:gcc -E -o hello.cpp h…
一.编译链接的过程和ELF可执行文件格式 vi hello.c gcc -E -o hello.cpp hello.c -m32 //预处理.c文件,预处理包括把include的文件包含进来以及宏替换等工作 vi hello.cpp gcc -x cpp-output -S -o hello.s hello.cpp -m32 //编译 vi hello.s gcc -x assembler -c hello.s -o hello.o -m32 //汇编 vi hello.o gcc -o hel…
学号后三位<168> 原创作品转载请注明出处https://github.com/mengning/linuxkernel/ 1.分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构 Linux中创建进程一共有三个函数 fork,创建子进程 vfork,与fork类似,但是父子进程共享地址空间,而且子进程先于父进程运行. clone,主要用于创建线程 进程创建过程: YSCALL_DEFINE0(fork) { , , NULL,…
本文源于size_t的说明,看到比尔盖茨说过:640K内存对于任何人来说都足够了,所以找了一篇文章,学习一下~~ 一直以来都知道自己有关计算机底层的知识不是不扎实,前段时间跟着大佬们推荐在[极客时间]买了 徐文浩 老师的专栏 深入浅出计算机组成原理,增强一下自己的计算机底层知识,顺便在这里分享一下. 计算机这个行业的历史上有过很多成功的预言,最著名的自然是"摩尔定律".当然免不了的也有很多"失败"的预测,其中一个最著名的就是,比尔·盖茨在上世纪 80 年代说的&qu…
目录 . 简介 . 进程虚拟地址空间 . 内存映射的原理 . 数据结构 . 对区域的操作 . 地址空间 . 内存映射 . 反向映射 .堆的管理 . 缺页异常的处理 . 用户空间缺页异常的校正 . 内核缺页异常 . 在内核和用户空间之间复制数据 1. 简介 用户层进程的虚拟地址空间是Linux的一个重要抽象,它向每个运行进程提供了同样的系统视图,这使得多个进程可以同时运行,而不会干扰到其他进程内存中的内容,此外,它容许使用各种高级的程序设计技术,如内存映射,学习虚拟内存,同样需要考察可用物理内存中…
目录 . 引言 . Linux Security Module Framework Introduction . LSM Sourcecode Analysis . LSMs Hook Engine:基于LSM Hook进行元数据的监控获取 . LSM编程示例 . Linux LSM stacking 0. 引言 从最佳实践的角度来说,在Linux Kernel中进行安全审计.Access Control(访问控制)最好的方式就是使用Linux提供的原生的框架机制,例如 . Kprobe: Li…
382 + 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验环境 win10 -> VMware -> Ubuntu16.04 + GDB -> QEMU -> linux-3.9.4 + MenuOS 二.实验目的 1.理解Linux内核中创建一个进程的过程: 2.理解Linux内核加载可执行程序的过程: 3.理解Linux内核中的进程调度时机以及进程切换过程. 三.实验过程及结果 1.对于Linux内核中进程…
网络文件系统(Network File System, NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984年发布.其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件.NFS和其他许多协议一样,是基于开放网络运算远程过程调用(Open Network Computing Remote Procedure Call, ONC RPC)协议之上的.它是一个开放.标准的RFC(Request For Comments, 请求意见稿)协议,任…
RISC-V是源自Berkeley的开源体系结构和指令集标准.这个模拟器实现的是RISC-V Specification 2.2中所规定RV64I指令集,基于标准的五阶段流水线,并且实现了分支预测模块和虚拟内存模拟.实现一个完整的CPU模拟器可以很好地锻炼系统编程能力,并且加深对体系结构有关知识的理解.在开始实现前,应当阅读并深入理解Computer Systems: A Programmer's Perspective中的第四章,或者Computer Organizaton and Desig…
基于S3C2440的U-BOOT的start.S分析 在了解了ARM相关的汇编指令后,同时结合网上各位大虾的提点开始阅读u-boot的启动代码,现将分析过程记录如下 可执行文件及内存映射 我们可以把可执行文件分为2种情况:存放态和运行态 .存放态:可执行文件经过烧到存储介质上(flash或磁盘)的分布,此时可执行文件通常有2部分组成,代码段和数据段, 代码段又分为可执行代码段 (.text)和只读数据段(.rodata),数据段可以分为初始化数据段(.data)和未初始化代码段(.bss),如下…
目录 [pwn基础]Pwntools学习 Pwntools介绍 Pwntools安装 Pwntools常用模块和函数 pwnlib.tubes模块学习 tubes.process pwnlib.context(运行环境) pwnlib.elf(ELF文件操作) pwnlib.asm(汇编模块) pwnlib.shellcraft(Shellcode生成器) pwnlib.util(小工具) pwnlib.rop PWN菜鸡小分队 [pwn基础]Pwntools学习 Pwntools介绍 Pwnt…
Delphi 函数大全 - xiucaiyao的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/xiucaiyao/article/details/4544039 名称 类型 说明 abort 函数 引起放弃的意外处理 abs 函数 绝对值函数 addexitproc 函数 将一过程添加到运行时库的结束过程表中 addr 函数 返回指定对象的地址 adjustlinebreaks 函数 将给定字符串的行分隔符调整为cr/lf序列 align 属性 使控件位于窗口…
目录 . 动态链接的意义 . 地址无关代码: PIC . 延迟版定(PLT Procedure Linkage Table) . 动态链接相关结构 . 动态链接的步骤和实现 . Linux动态链接器实现 . 显式运行时链接 . 共享库系统路径 && 默认加载顺序 1. 动态链接的意义 . 静态链接对内存和磁盘的浪费很严重,在静态链接中,C语言静态库是很典型的占用空间的例子 . 静态链接对程序的更新.部署.发布会造成严重的麻烦 为了解决这些问题,最好的思路就是把程序的模块相互分割开来,形成独…
http://blog.csdn.net/u011096030/article/details/18716713 button 组件: CAPTION 属性 :用于在按钮上显示文本内容 Cancel 属性:是否设置成默认的取消按钮,当设置为真的时候(true) 按ESC触发改按钮的事件! Default 属性:是否设置成默认的确认按钮,当设置为真的时候 按ENTER键的时候触发事件 Hint 属性:设置当鼠标在按钮上短暂停留是显示的提示内容. Showhint 属性: 是否显示提示内容默认为假!…
参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台: [root@tanghuimin dynamic_link]# uname -a Linux tanghuimin -.el6.x86_64 # SMP Fri Feb :: UTC x86_64 x86_64 x86_64 GNU/Linux 实例讲解之前先来一段理论铺垫,文字很繁琐但很必要事先了解.…
PE:Portable Executable File Format(可移植的执行体).Windows平台主流可执行文件格式..exe与.dll文件都是PE格式.32位的叫做PE32,64位的叫做PE32+.PE文件格式定义在winnt.h头文件中. PE文件格式总览: PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构.文件的内容被分割为不同的区块(Section,又名区段,节等),区块中包含代码或数据,各个区块按页边界来对齐,区块没有大小限制,是一个连续的结构…
原文:http://my.oschina.net/u/1984662/blog/293690 目录[-] Core Animation基础 改变视图的层 动画支持 视图坐标系统 边框.边界.和中心的关系 坐标系统变换 内容模式与比例缩放 自动尺寸调整行为 创建和管理视图层次 创建一个视图对象 添加和移除子视图 视图层次中的坐标转换 标识视图 在运行时修改视图 实现视图动画 配置动画的参数 配置动画的委托 响应布局的变化 重画视图的内容 隐藏视图 创建一个定制视图 初始化您的定制视图 描画您的视图…
常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大小 BiDiMode:(所有组件) 为从右向左写的语言提供支持 BoundsRect:定义组件边框矩形(只适用于运行时) Borderwidth:(窗口化组件)边框的宽度 BorberStyle:设置组件边框形状(样式) Brush:可确定组件的风格和颜色 Caption:使用该属性可指定标注组件的…
动态链接库技术使软件工程师们兽血沸腾,它使得应用系统(程序)可以以二进制模块的形式灵活地组建起来.比起源码级别的模块化,二进制级别的模块划分使得各模块更加独立,各模块可以分别编译和链接,模块的升级不会引起其它模块和主程序的重新编译,这点对于大系统的构建来说更加实用.另一方面,对于商业目的明显的企业,各模块可以独立设置访问权限,开发成员只能访问自己负责的模块,其它模块是不能也不给看到的,这样减少了整个系统泄漏技术的风险. 一.动态链接库技术概况 动态链接库技术用得很多.事实上,整个Windows就…
在调用视图的 Quartz  调用都可以正确地在视图中描画.   视图对象通过 bounds .和 center  属 性声明来跟踪自己的大小和位置.frame 属性包含一个矩形,即边框矩形,用于指定视图相对于其父视图坐标系统的位置和大小.bounds 属性也包含一个矩形,即边界矩形,负责定义视图相对于本地坐标系统的位置和大小.虽然边界矩形的原点通常被设置为(0, 0),但这并不是必须的.center 属性包含边框矩形的中心点.   当您在代码中通过 initWithFrame :方法创建一个视…
在#Pragma是预处理指令它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征.依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的.其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数.(1)message 参数. Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制…
其实这是我前一段时间思考过的一个问题,是在看<深入探索C++对象模型>这本书的时候我产生的一个疑问,最近在网上又看到类似的帖子,贴出来看看: 我看到了很多有意思的答案,都回答的比较好,下面贴出一些具有代表性的: Answer 1: Answer 2: 我们都知道,虚函数是多态机制的基础,就是在程序在运行期根据调用的对象来判断具体调用哪个函数,现在我们来说说它的具体实现原理,主要说一下我自己的理解,如果有什么不对的地方请指正在每个包含有虚函数的类的对象的最前面(是指这个对象对象内存布局的最前面,…
abort 函数 引起放弃的意外处理 addexitproc 函数 将一过程添加到运行时库的结束过程表中 addr 函数 返回指定对象的地址 adjustlinebreaks 函数 将给定字符串的行分隔符调整为cr/lf 序列 allocmem 函数 在堆栈上分配给定大小的块 ansicomparestr 函数 比较字符串(区分大小写) ansicomparetext 函数 比较字符串(不区分大小写) ansilowercase 函数 将字符转换为小写 ansiuppercase 函数 将字符转…
UIImageView高效加个圆角 一般通过clipsToBounds和layer.cornerRadius会强制Core Animation提前渲染屏幕的离屏绘制,影响性能. 通过贝塞尔曲线切割图片实现path.addclip(); drawRect在以下情况下会被调用: 1.如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用.drawRect 掉用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉…
课本:第七章 可执行程序工作原理 ELF目标文件格式 目标文件:编译器生成的文件. 目标文件的格式:out格式.COFF格式.PE(windows)格式.ELF(Linux)格式. ELF(Executable and Linkable Format)即可执行和可链接的格式,是一个目标文件格式的标准.ELF格式的文件用于存储Linux程序. ELF文件的3钟类型:可重定位文件.可执行文件.共享目标文件. 可重定位文件:这种一般是中间文件,还需要继续处理.由汇编器和编译器创建,一个源代码文件会生成…
程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 可执行程序的装载 知识点梳理 一.预处理.编译.链接和目标文件的格式 可执行程序是如何得来的 C源代码(.c)经过编译器预处理被编译成汇编代码(.asm) 汇编代码由汇编器被编译成目标代码(.o) 将目标代码链接成可执行文件(a.out) 可执行文件由操作系统加载到内存中执行 vi hello.c gcc -E -o hello.cpp hell…