第六章、可执行文件的装载与进程 (总结)

可执行文件从装载到运行的全过程描述 我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,(关于源代码到可执行文件的介绍见我的另一篇博客:程序从代码到可执行文件的过程简述)那么当我们在cmd窗口敲出指令$test argv1 argv2\n 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后的每一个程序,每一个应用,都 阅读详情

 

 

6.1 进程虚拟地址空间

可能通过判断C语言程序中指针所占的空间来计算虚拟地址空间的大小,一般C语言指针大小的倍数与虚拟空间的位数相同,如32位平台下的指针为32位。

 

6.2装载的方式

1) 覆盖装入(overlay)

2)页映射(paging) :是虚拟存储机制的一部分,现在用的较多。

有一些算法来调度哪些页被装载物理内存。如FIFO(先进先出)、LUR(最少使用)等。

6.3可执行文件的装载过程

6.3.1进程的建立

1)创建虚拟地址空间,即创建虚拟空间与物理空间的映射关系。

2)读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系。

3)将CPU指令寄存器设置成可执行文件入口,启动运行。

6.3.2 页错误

此时可执行文件的指令和数据才真正装入内存。

注:在内存中进程最多可使用3G的内存空间; 地址空间从0xC0000000-0xFFFFFFFF共1G的内存空间主要分配给操作系统。

 

堆的最大申请数量:在linux下大概最大2.9G

 

段地址对齐

 

进程在启动时应该进行相应的进程栈初始化。

 

 

 

 

可执行文件的装载,进程和线程,运行时库的入口函数(第六章) 装载过程 程序执行时所需要的指令和数据必须在内存中(指的是物理内存)才能正常运行。程序装载指的就是把这些东西加载到内存中。最简单的装载方式就是把所需的指令和数据全部装入内存,称为静态装载。但是这样会比较消耗内存。动态装载的思想是程序用到哪个模块就装入内存。下面介绍动态加载的过程: 1.创建一个独立的虚拟内存空间 创建的是映射表的数据结构,使用二级表的话,分配一个4K的页目录就可以了,后面的映... 阅读详情

相关推荐

避坑指南:STM32F4的ADC采样FSR传感器,如何稳定读数并校准压力值?

本文详细解析了STM32F4的ADC采样FSR薄膜压力传感器时遇到的读数不稳定和非线性校准问题,提供了从硬件配置到软件滤波的完整解决方案。通过优化ADC设置、改进滤波算法和实施分段线性校准,帮助工程师实现高精度压力测量,特别适用于智能手套和医疗监测等应用场景。

weixin_28675839的博客 273

从程序到进程:谈谈可执行文件是如何与进程相对应并最终被CPU执行的。

背景知识1:虚拟内存空间 从实模式到保护模式,从实际物理地址的访问到虚拟地址空间的访问。这一转变也导致了可执行文件的载入内存方式的转变,即:从简单的一次性装入(基本是就是一个拷贝、粘贴的过程),演变成由操作系统负责调度和装入内存。 而演变后的载入过程更多的是一种概念和逻辑,这

sjtu_huang的专栏 1974

GitLab教程(四):分支(branch)和合并(merge)

命令进行合并时,Git具备一定的智能自动化处理能力:如果一个分支仅修改了文件A,而另一个分支独立地修改了文件B,Git能够无缝整合这些更改,自动完成合并过程——即最终的代码既包含了对A文件的修改也包含了对B文件的修改。同样地,若两个分支虽然都修改了同一个文件,但涉及的是文件中互不重叠的部分,比如一个改动发生在第一行,另一个则在第二行,Git同样能巧妙地自动合并这些非冲突性修改。获取了远程分支的最新变化,或者当你想要合并本地的一个分支到当前分支时,就会用到这个命令。,默认会尝试合并远程分支到当前分支。

TracyCoder的博客 7886

链接装载与库 第6章 可执行文件的装载与进程

可执行文件的装载与进程 在第一章中讲到,程序直接使用物理内存地址有以下缺点: 地址空间不隔离。恶意程序可以很容易的改写其他程序的数据。 内存使用效率低。一个程序需要执行时,需要将整个程序装入内存之中。 程序运行地址的不确定。因为无法保证每次都将程序加载到相同的地址,会涉及到程序重定位的问题。 解决方法是使用分页的方式: 操作系统将内存分成大小固定的页(最常用的页大小为4kb)。进程使用虚拟地址...

copbint 464

LAMMPS实操系列(一): 大量FCC-CoCrCuFeNi高熵合金建模与最稳定结构筛选

高熵合金(High-entropy alloys,HEA),是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多优秀的物理化学性质,因此在材料科学领域受到广泛关注

Ceshigo_CD的博客 3258

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 542

页映射与可执行文件的装载

页映射与可执行文件的装载 我们知道可执行文件只有装载到内存之后才能被CPU处理执行,早期的程序装载十分简陋,装载的基本过程就是把程序从外部存储器中读取到内存中的某个位置。随着现代虚拟地址空间及MMU的发展,在多进程、多用户、虚拟存储的操作系统下,可执行文件的装载变得更复杂了。 进程的虚拟地址空间 每个程序被运行起来后,它将拥有自己独立的虚拟地址空间。这个虚拟地址空间的大小由计算机硬件平台决定,CPU的寻址范围决定了地址空间的理论上限。32位硬件平台决定了虚拟空间的地址为0到2^32-1,即4G虚拟空间大小。

qq_41105501的博客 389

大模型推理中Prefill与Decode、KV Cache三者说明

Prefill 阶段对输入 Prompt 并行编码,一次性构建KV Cache,属于计算密集型任务。Decode 阶段逐 token 迭代生成,复用KV Cache避免重复计算,属于显存带宽密集型任务。KV Cache是自回归推理的核心基石,用显存换时间,实现两阶段衔接与高效生成。PD 分离通过任务解耦、异构硬件、异步调度、独立批处理,解决传统一体化推理的资源冲突与利用率低下问题,是当前云端大模型推理服务的主流工程优化方向。

a486259的博客 1489

可执行程序加载到内存的过程

在linux中,程序的加载,涉及到两个工具,linker 和loader。Linker主要涉及动态链接库的使用,loader主要涉及软件的加载。 1、  exec执行一个程序 2、  elf为现在非常流行的可执行文件的格式,它为程序运行划分了两个段,一个段是可以执行的代码段,它是只读,可执行;另一个段是数据段,它是可读写,不能执行。 3、  loader会启动,通过mmap系统调

Tyrion Lannister's Special column 1万+

大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略

本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。

wdx012345的博客 803

mabl:AI原生测试自动化平台的基础使用

mabl是一个基于人工智能和机器学习的云原生测试自动化平台。它通过使用先进的技术,如机器学习,自动创建和执行测试,自动分析测试结果,并根据需求的变化自动适配和维护测试。这样的自动化过程极大地提高了软件测试的效率和准确性。mabl的口号是 “You write code, mabl tests”,意味着开发者只需关注编写代码,而测试工作则可以交给mabl来完成。mabl的平台支持多种测试类型,包括 Web、App、Api、可访问性和性能测试,使得团队能够更快速、更有信心地发布软件。

blues_C的博客 3657

《链接装载与库》第六章——可执行文件的装载与进程

当linux系统在bash下输入一个命令执行ELF的时候。首先在用户层面,bash进程会调用fork系统调用创建一个新的进程,然后新的进程调用execve系统调用执行指定的ELF文件。原先的bash进程继续返回等待刚才启动的新进程结束,然后继续等待用户输入命令。在进入execve系统调用之后,linux内核就开始进行了真正的装载工作。httpshttpshttpshttpshttpshttps。...............

yelvens的博客 1190

CDR插件开发之CPG插件017 - 在VS2019中实现CPG插件调试(自动写入CPG、自动启动CDR)

在上篇文章中,讲解了图像导出实例:当文档打开后,自动导出当前页面的图像到系统临时文件夹。在代码编写过程中,导出图像路径变量tmpFileName 被修改了很多次,有没有办法实现调试功能,通过控制台打印变量,而不用编译成CPG后再通过消息框来调试?当然是可以的。本篇作为单独篇,以CDR X8版本为例,讲解CPG插件在VS2019中实现调试的具体方法。 工程搭建准备 按照惯例,本篇文章的序号为017,请直接拷贝上一个工程016-export-image(拷贝前最好清理掉 Debug、x64等编译目录..

Zebe 1811

程序员的自我修养 第六章 可执行文件的装载与进程

程序员的自我修养 第六章 可执行文件的装载与进程

dream_for_2016的博客 183

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

第六章:可执行文件的装载与进程--重点知识概括整理

下面是对俞甲子等著的书籍《程序员的自我修养》第6章主要内容的整理

... 1355

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《程序员的自我修养》学习心得——第六章 可执行文件的装载与进程(上)

引言 第五章没写,是因为第五章主要将的是Windows下的PE结构。其实在前面也提到过,做这个系列是为Linux下漏洞挖掘和做pwn题准备的,所以Windows的东西基本上不碰。我是从Windows转到Linux,因为个人认为如果咱们国家如果想要实现技术自主的话,Windows系统很有可能会被淘汰。国产操作系统在类Unix系统方面的厂商有很多,所以,只是个人的一些想法。如果你喜欢Windows下的漏洞挖掘,那么可以自行看一下《程序员的自我修养》第五章。 好的嘛,第六章开整,记得点赞哦Thanks♪(・ω.

hollk’s blog 851

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《程序员的自我修养》学习心得——第六章 可执行文件的装载与进程 (下)

引言 个人认为接下来的部分对做题很有帮助,所以就分了上和下。接下来的堆栈的介绍会让你做题的时候更加通透。 2、堆和栈 操作系统通过使用VMA来对进程的地址空间进行管理,例如栈(Stack)和堆(Heap),他们在进程的虚拟空间中的表现也是以VMA的形式存在的,并且一个进程中的栈和堆分别都有一个对应的VMA 操作系统通过给进程空间划分出一个个VMA来管理进程的虚拟空间,基本原则是将相同权限属性的、有相同映像文件的映射成一个VMA,一个进程基本上可以分为如下VNA区域: 代码VMA,权限只读、可执行;有映.

hollk’s blog 837

读书-程序员的自我修养-链接、封装与库(16: 第六章:可执行文件的装载与进程(4)Linux 内核装载ELF过程简介 和 windows PE的装载

读书-程序员的自我修养-链接、封装与库(16: 第六章:可执行文件的装载与进程(4)Linux 内核装载ELF过程简介 和 windows PE的装载)1. Linux 内核装载ELF过程简介1.1 ./a.out 背后的逻辑2. windows PE的装载2.1 PE 和 ELF 有所不同2.2 RAV 相对虚拟地址 基地址 1. Linux 内核装载ELF过程简介 当我们在linux系统的bash下输入一个命令执行某个elf程序时, linux系统是怎么装载这个elf文件并执行它的呢? 我们以hello

哈尼的博客 276

读书-程序员的自我修养-链接、封装与库(14: 第六章:可执行文件的装载与进程(2)从操作系统角度看可执行文件的装载:进程建立的3个步骤,虚拟地址空间,页错误

读书-程序员的自我修养-链接、封装与库(14: 第六章:可执行文件的装载与进程(2)从操作系统角度看可执行文件的装载)1. 从操作系统角度看可执行文件的装载1.1 进程建立的三个步骤1.1.1 创建一个独立的虚拟地址空间1.1.2 建立虚拟空间和可执行文件的映射关系1.1.3 将cpu的指令寄存器设置为可执行文件的入口地址,执行它1.2 为什么需要虚拟地址空间?1.3 页错误1.3.1 页错误定义1.3.2 页错误的处理 1. 从操作系统角度看可执行文件的装载 1.1 进程建立的三个步骤 从操作系统角度看,

哈尼的博客 841

读书-程序员的自我修养-链接、封装与库(13: 第六章:可执行文件的装载与进程(1)进程虚拟地址空间 和 装载方式(转载)

读书-程序员的自我修养-链接、封装与库(13: 第六章:可执行文件的装载与进程(1)进程虚拟 地址空间 和 装载方式) 进程虚拟地址空间 1.1 4GB虚拟地址空间 1.2 4GB虚拟地址空间不能任意使用 1.2.1 4GB虚拟地址空间分配 1.2.2 3GB空间不够用怎么办? PAE出现 装载的方式 2.1 局部性原理的出现 2.1.1 局部性原理(动态装入的基本原理) 2.2 两种动态装入方法 2.2.1 覆盖装入/overlay 2.2.2 页映射/paging 2.2.3 页映射例子: 进程虚拟地

zhonghahaha的博客 182

读书-程序员的自我修养-链接、封装与库(15: 第六章:可执行文件的装载与进程(3)进程虚存空间分布

读书-程序员的自我修养-链接、封装与库(15: 第六章:可执行文件的装载与进程(3)进程虚存空间分布)1. ELF 文件链接视图和执行视图1.1 问题出现--多段不整页映射浪费空间1.2 解决问题--同权限的段合并Segment映射1.2.1 ELF段的三种权限1.2.2 解决方案1.2.3 Segment1.2.4 sectionMap.elf 例子说明2. 堆和栈2.1 VMA 的作用2.2 例子-查看进程虚拟空间分布2.3 总结-进程虚拟地址空间2.4 进程虚拟空间映射关系图3. 堆的最大申请数量3.

哈尼的博客 446

读书-程序员的自我修养-链接、封装与库(13: 第六章:可执行文件的装载与进程(1)进程虚拟地址空间,4GB,和 装载方式,局部性原理,页映射

读书-程序员的自我修养-链接、封装与库(13: 第六章:可执行文件的装载与进程(1)进程虚拟地址空间 和 装载方式)1. 进程虚拟地址空间1.1 4GB虚拟地址空间1.2 4GB虚拟地址空间不能任意使用1.2.1 4GB虚拟地址空间分配1.2.2 3GB空间不够用怎么办? PAE出现2. 装载的方式2.1 局部性原理的出现2.1.1 局部性原理(动态装入的基本原理)2.2 两种动态装入方法2.2.1 覆盖装入/overlay2.2.2 页映射/paging2.2.3 页映射例子: 1. 进程虚拟地址空间 1

哈尼的博客 360

可执行文件的装载与进程

程序加载流程

Daniel Leng的博客 319

06可执行文件装载

第六章 可执行文件的装载与进程 1进程虚拟地址空间 32位的进程虚拟空间为4G,在linux系统中,操作系统占高位的1G,从0xC0000000到0xFFFFFFFF。用户进程虚拟空间从0x080480000开始映射。 2装载方式 静态装载 and 动态装载 覆盖装入 and 页映射 覆盖装入需要程序员写一个常驻内存的覆盖管理器,需要保...

weixin_33957648的博客 88

2.程序员的自我修养 - 静态链接与程序装载

目录 第二章 静态链接 2.1程序编译的过程 第三章 目标文件的格式 3.1目标文件的格式 3.2目标文件具体内容 3.3ELF文件结构 3.4重定位表 3.5字符串表 3.6链接的接口 3.7弱符号与强符号 第四章 静态链接 4.1空间与地址分配 4.2符号解析与重定位 4.3COMMON块 4.4C++相关问题 4.5链接控制脚本 第五章 Windows PE/COFF 第六章 可执行文件的装载与进程 6.1进程虚拟地址空间 6.2装载方式 6.3从操作系.

飞舞哲 342

可执行文件的装载与执行

《程序员的自我修养》第六章  P157

xiaoshengqdlg的专栏 428
上一篇: 关于栈和堆的区别
下一篇: 动态绑定
Alexcrazy
博客等级 码龄15年 20粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值