首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当8086中CS:IP对应的物理地址超过20位时,会发生什么情况?

当8086中CS:IP对应的物理地址超过20位时,会发生段越界的情况。在8086处理器中,CS寄存器存储了当前代码段的起始地址,IP寄存器存储了当前指令在代码段中的偏移地址。这两个寄存器的组合构成了当前指令的物理地址。

在8086中,物理地址总线的宽度为20位,因此物理地址的范围是0到2^20-1。当CS:IP对应的物理地址超过这个范围时,就会发生段越界。

段越界可能导致以下情况发生:

  1. 访问非法内存:如果CS:IP对应的物理地址超过了系统内存的范围,就会访问到非法的内存地址,可能导致程序崩溃或产生不可预测的结果。
  2. 数据损坏:如果CS:IP对应的物理地址超过了当前代码段的范围,就会访问到其他代码段的数据,可能导致数据损坏或混乱。
  3. 安全漏洞:段越界可能被恶意攻击者利用来执行恶意代码或获取敏感信息。

为了避免段越界的问题,开发人员可以采取以下措施:

  1. 合理设计代码段:将代码段划分为合适的大小,避免一个代码段过大导致物理地址超过20位。
  2. 使用合适的编程技术:使用合适的编程技术和工具,如指针检查、边界检查等,来确保程序在运行时不会发生段越界。
  3. 安全审计:定期进行安全审计,发现并修复潜在的段越界漏洞,以防止恶意攻击。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算产品:https://cloud.tencent.com/product
  • 腾讯云数据库产品:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器产品:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能产品:https://cloud.tencent.com/product/ai
  • 腾讯云物联网产品:https://cloud.tencent.com/product/iot
  • 腾讯云存储产品:https://cloud.tencent.com/product/cos
  • 腾讯云区块链产品:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙产品:https://cloud.tencent.com/product/ue
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【汇编】(二)寄存器(CPU工作原理)

8086CPU 采用一种在内部用两个16位地址合成方法来形成一个20位物理地址: 8086CPU读写内存发生了这么一些事: CPU 中相关部件提供两个16位地址,一个称为段地址,另一个称为偏移地址...8086CPU有4个段寄存器:CS、DS、SS、ES; 8086CPU 要访问内存,由这4个段寄存器提供内存单元段地址。  ...在 8086CPU 加电启动或复位后( 即 CPU 刚开始工作CSIP 被设置为 CS=FFFFH,IP=0000H。...jmp 段地址:偏移地址 jmp 2AE3:3 jmp 3:0B16 仅修改IP内容: jmp 某一合法寄存器 jmp ax (类似于 mov IP,ax) jmp bx CPU运行流程 内存中存放机器码和对应汇编指令情况...8086 CPU 要访问内存,由段寄存器提供内存单元段地址。8086 CPU 有4个段寄存器,其中 CS 用来存放指令段地址。 2、CS 存放指令段地址,IP 存放指令偏移地址。

43830

爱了爱了,这篇寄存器讲有点意思

我们在合成物理地址那张图提到了 相关部件 概念,这个相关部件其实就是段寄存器,即 「CS、DS、SS、ES」 。8086 CPU 在访问内存,由这四个寄存器提供内存单元段地址。...CS 寄存器 要聊 CS 寄存器,那么 IP 寄存器是你绕不过去曾经。CSIP 都是 8086 CPU 非常重要寄存器,它们指出了 CPU 当前需要读取指令地址。...此时这个指令就已经具备执行条件,此时 IP 也就是指令指针自动增加。我们上面说到 IP 其实就是从 Code Segment 也就是 CS 处偏移地址,也就是偏移地址。...使用 「PUSH」 指令向栈中压入 1 个字节单元,SP = SP - 1;即栈顶元素会发生变化; 而使用 「PUSH」 指令向栈中压入 2 个字节字单元,SP = SP – 2 ;即栈顶元素也要发生变化...; 使用 「POP」 指令从栈中弹出 1 个字节单元, SP = SP + 1;即栈顶元素会发生变化; 使用 「POP」 指令从栈中弹出 2 个字节单元字单元, SP = SP + 2 ;即栈顶元素会发生变化

4.6K31

从进入内核态看内存管理

为 0x0003,那么对应指令地址为 图示为真实物理地址计算方式,从中可知, CS 其实保存是真实物理地址高 16 位 分段初衷是为了解决寻址问题,但本质上段寄存器中保存还是真实物理地址段基础...,且可以随意指定,所以它也无法支持多进程,因为这意味着进程可以随意修改 CSIP 将其指向任意地址,很可能覆盖正在运行其他进程内存,造成灾难性后果。...通过线性地址(在只有段式内存情况下,线性地址为物理地址)访问一个内存页。...另外执行中断程序时,还需要首先把当前用户进程中对应堆栈,返回地址等信息,以便切回到用户态能恢复现场 可以看到 int 80h 这种软件中断执行又是检查特权级,又是从用户态切换到内核态,又是保存寄存器值...20 位内存地址呢,于是段概念被提出了,段出现虽然解决了寻址问题,但本质上 CS << 4 + IP 寻址方式依然还是绝对物理地址,这样的话由于地址互相覆盖,显然无法做到多进程运行,于是保护模式被提出了

92550

汇编语言-第二章 寄存器(CPU工作原理)

8086CPU要读写内存: (1).CPU中相关部件提供两个16位地址,一个称为段地址,一个称为偏移地址 (2).段地址和偏移地址通过内部总线送入一个称为地址加法器部件 (3).地址加法器将两个...2.7 “段地址×16+偏移地址=物理地址本质含义 本质含义就是: CPU在访问内存,用一个基础地址(段地址×16)和一个相对基础地址偏移地址相加,给出内存单元物理地址。...8086有4个段寄存器:CS,DS,SS,ES。 2.10 CSIP 8086CPUCPU要访问内存由这4个段寄存器提供内存单元段地址。...mov指令不能用于设置CSIP值,原因是:8086没有提供这样功能。 能够改变CSIP内容指令被统称为转移指令。...2.9节~2.12节 小结 段地址在8086CPU段寄存器中存放。8086CPU要访问内存,由段寄存器提供内存单元段地址。8086CPU有4个段寄存器,其中CS用来存放指令段地址。

72320

汇编语言访问寄存器和内存篇---02

Debug q - 退出Debug ---- CSIP与代码段 两个关键寄存器 CS:代码段寄存器 IP: 指令指针寄存器 CS:IP:CPU将内存中CS:IP 指向内容当作指令执行。...CS提供段地址,16位 IP可以理解为PC寄存器,提供是偏移地址,也是16位 位址加法器对两个16位地址进行相加,然后得到一个20位地址 通过BUS地址总线,发送给MAR MAR从内存中取出该地址对应指令...---- jmp指令 修改CSIP指令: 事实:执行何处指令,取决于CS:IP 应用:可以通过改变CSIP内容,来控制CPU要执行目标指令 问题:如何改变CSIP值?...(4)在内存和寄存器之间传送字型数据,高地址单元和高8位寄存器、 低地址单元和低8位寄存器相对应。...栈顶超界问题: 如何能够保证在入栈、出栈,栈顶不 超出栈空间?

69610

【读书笔记】汇编语言(第四版)第二章 寄存器

字:记为word, 一个字由两 物理地址&16位结构CPU&8086CPU给出物理地址方法 CPU 访问内存单元,要给出内存单元地址。...8086CPU 相关部件逻辑结构如图 如图2.6 所示,8086CPU 要读写内存: (l) CPU 中相关部件提供两个16 位地址, 一个称为段地址,另一个称为偏移地址; (...“数据在内存21F60H 单元中” 段寄存器&CSIP&修改CSIP指令&代码段 8086CPU 在访问内存要由相关部件提供内存单元段地址和偏移地址,送入地址加法器合成物理地址 段地址在8086CPU...段寄存器中存放 8086CPU 有4 个段寄存器: CS 、DS 、SS 、ES 8086CPU 要访问内存由这4 个段寄存器提供内存单元段地址 CSIP 是8086CPU 中两个最关键寄存器...8086CPU 要访问内存,由段寄存器提供内存单元 段地址。

6910

通过linux0.11源码理解进程虚拟地址、线性地址、物理地址

假设当前执行cs:ip指向代码,系统根据ldt值从gdt中选择一个元素,里面保存是idt结构首地址。...然后根据cs值选择idt表格中一项,从而得到代码段基地址和限长,用基地址加上ip指向偏移得到一个线性地址,这个线性地址分为三个部分,分别是页目录索引,页表索引,物理地址偏移。...到进程被调度执行时所发生事情。fork函数具体调用过程之前已经分析过。下面贴一下主要代码。...用线性地址首地址加上ip偏移,得到线性地址,然后再通过页目录和页表得到物理 地址,物理地址还没有分配则进行缺页异常等处理。...最后根据tss中csip执行进程。这就是文章开头过程。这就是linux0.11版本中进程地址管理实现。下面是fork后结构图。 ?

1.5K60

Linux从头学02:x86中内存【段寻址】方式来龙去脉

中,已经提到过,在处理器内部,执行每一条指令码,CPU 是非常机械、非常单纯地从 CS:IP 这 2 个寄存器计算得到转换后物理地址,从这个物理地址所指向内存地址处,读取一定长度指令,然后交给逻辑运算单元...物理地址计算方式是:CS * 16 + IP CPU 读取一条指令后,根据指令操作码它能够自动知道这条指令一共需要读取多少个字节。...例如,在内存 20000H 开始地方,存在 2 条指令: mov ax, 1122H mov bx, 3344H 执行第一条指令CS = 2000H,IP = 0000H,经过地址转换之后物理地址是...因此,用来对代码段进行寻址这两个寄存器 CSIP,它们含义就非常清楚了: CS: 段寄存器,其中值左移 1 位之后,得到值就表示代码段在内存中首地址,或者称作基地址; IP: 指令指针寄存器...超过了 1 MB 空间大小,但是毕竟只有 20 根地址线,肯定是无法寻址超过 1 MB 地址空间,因此系统采取回绕方式来定位到一个地址空间,类似与数学中取模操作。

1.5K30

汇编语言从入门到精通-2CPU资源和存储器

在使用第5.2.9节中“条件转移指令”,系统自动引用相应标志位值来决定是否需要“转移”,所以,不必过分强调标志位在标志寄存器内具体位置。...图2.5 16位CPU物理地址计算示意图 图2.6 物理地址和逻辑地址之间关系 对物理地址来说,段地址变化时,只要对其偏移量进行相应调整就可对应同一个物理地址,所以,同一个物理地址可有多个逻辑地址...表2.2 段寄存器及其指针寄存器引用关系 访问存储器方式 缺省段寄存器 可选用段寄存器 偏移量 取指令 CS IP 堆栈操作 SS SP 一般取操作数 DS CS、ES...在实方式下,由于段最大容量不超过64K,所以,EIP高16位全为0,其效果相当于16位CPU中IP。     堆栈段寄存器:32位微机在访问堆栈段,总是引用堆栈段寄存器SS。...另外,段寄存器CS、SS、ES、FS和GS也都可以作为访问数据段寄存器,但它们必须用段超越前缀方式在指令中直接写出。用这种方式增加指令长度,指令执行时间也有所延长。

63830

ret指令与call指令深入理解

其中ret指令用栈中数据,修改IP内容,实现近转移。而call指令将IP或者CSIP压入栈中,实现转移。还有retf指令,用栈中数据,修改CSIP内容,实现远转移。...(8086CPU有四个段寄存器,CS、DS、SS、ES,CPU要访问内存是由这四个段寄存器提供内存单元段地址。)...执行控制器执行指令后,AX内内容为0123H。 5、读取一条指令后,IP自动增加,以使CPU可以读取下一个指令。...输入输出电路将物理地址送上地址总线。故段地址和偏移地址也即CS内地址数据和IP内地址数据。 ret指令与call指令实现了什么功能?...子程序执行完后,由于call指令后面的指令地址已经存储在栈中( push操作), 使得在子程序后面再使用ret指令时候,栈中数据设置IP值, IP设置实现了CPU继续执行call指令后面的代码指令

4.5K20

通过do_execve源码分析程序执行(下)(基于linux0.11)

上篇讲了程序加载。然后设置了eip,这一篇分析一下开始执行第一条指令时候。会发生什么。 我们先看一下这时候内存布局。 ? 在这里插入图片描述 cpu通过cs:eip执行第一条指令时候。...首先通过cs值,在ldt中找到代码段基地址,然后加上eip,得到线性地址,然后通过线性地址到页目录和页表项里找是否已经映射到物理地址了。这时候发现,还没有对应物理地址,然后就触发缺页中断。.../ tmp大于等于end_data说明是访问堆或者栈空间发生缺页,直接申请一页 if (!...并且建立线性地址到物理地址映射。然后重新执行cs:eip对应指令,这时候就能找到对应指令执行了。...同理,当我们通过ds访问数据段时候也是这样,在指令里,访问数据时候,用地址是相对数据段偏移,通过地址转换,落到数据段对应线性地址里。然后通过缺页中断加载进来。

88630

8086汇编语言之数据段和代码段以及栈段理解

代码段CS+偏移地址段IP 代码段可以通俗理解为汇编代码指针 比如: 代码从 MOV AX 0220H 开始,那么代码段指向这行代码地址, 如果想要跳过这行代码执行,那么进行代码段偏移 在通过debug...模式配合-u指令查看汇编代码,可以根据CS进行范围查看: 比如: #以下模拟控制台输出 -r AX=0000 BX=0000........DS=13DB ES=13DB SS=13EB CS=13EB IP=0000 -u 13eb:0 13BE:0000 B8FFFF MOV AX,FFFF 栈段SS+偏移地址段SP 栈段可以通俗理解为栈指针...由8086CPU (段地址+偏移地址=“物理地址”) 方式给出内存单元物理地址,使得我们用分段方式管理内存 可以将段通俗理解为小区一栋楼,偏移地址为这栋楼住户门牌号.比如五号楼101房,那么形象比喻...这是由于8086cpu16位寄存器局限性造成, 由于16位寄存器最大只能存放0xFFFF 如果存放超过五位地址比如0xFFFFA 则无法存放, 为了解决这个问题, cup设计者想出了 段地址*16

2.1K30

万字整理内存管理之Cache

因此,这3个地址对应cache line是同一个。所以,当我们访问0x00地址,cache缺失,然后数据从主存中加载到cache中第0行cache line。...当我们访问0x40地址,依然索引到cache中第0行cache line,由于此时cache line中存储是地址0x00地址对应数据,所以此时依然cache缺失。...读分配(read allocation) CPU读数据发生cache缺失,这种情况下都会分配一个cache line缓存从主存读取数据。默认情况下,cache都支持读分配。...Cache更新策略(Cache update policy) cache更新策略是指发生cache命中,写操作应该如何更新数据。cache更新策略分成两种:写直通和回写。...别名(alias) 不同虚拟地址映射相同物理地址,而这些虚拟地址index不同,此时就发生了别名现象(多个虚拟地址被称为别名)。

86820

写一个boot引导程序

BIOS引导原理 首先要了解BIOS引导原理。启动自检过程中会去检查磁盘第0磁头第0磁道第1扇区,检查其是否以0x55和0xaa为结尾,如果是的话,就认为它是一个引导扇区。...接着就会将这个扇区复制到内存0x7c00处,随后从0x7c00处开始执行。 BIOS跳转到引导程序之前,初始化处理器,设置CS寄存器为0x0000,指令指针寄存器IP为0x7c00....这个时候cpu处于实模式下,物理地址必须经过CSIP寄存器转换才能得到,公式为:物理地址=(CS<<4)+IP对应也是物理地址0x7c00....初始化寄存器 这里涉及到几个寄存器 cs “代码段寄存器”,对应于内存中存放代码内存区域,用来存放内存代码段区域入口地址(段基址) ax 累加寄存器 ds 数据段寄存器 es 附加段寄存器 ss...INT 10h, AH=06h,功能是按指定范围滚动窗口。

58630

微机原理与接口技术 重点详解与章节总结——8086微处理器系统结构

执行转移指令、调用指令,BIU装入IP是转移目的地址。 偏移地址表示离段起始地址之间距离,用字节数表示。...6字节指令队列:执行单元EU正在执行指令中,且不需要占用总线,BIU自动进行预取下一条或几条指令操作,并按先后次序存入指令队列中排队,由EU按顺序取来执行。...取指令地址由代码段寄存器CS16位段基址最低位后补4个0,再与指令指针IP16位偏移地址在地址加法器中相加得到20位物理地址。...这样对于20位段起始地址,其低4位为0,可暂时先忽略,而只有高16位是有效数字,可存放于16位寄存器中。在形成20位物理地址,段寄存器中16位数自动左移4位,然后与16位偏移量相加 。...4、中断返回 执行到IRET指令,自动弹出IPCS以及标志寄存器FR,返回中断前程序位置,执行下一条指令。

6.4K20

Linux从头学05-系统启动过程中几个神秘地址,你知道是什么意思吗?

把段寄存器 cs 设置为 0xFFFF,指令寄存器 ip 设置为 0x0000; 把其它所有寄存器设置为 0x0000; 所有的初始化完成之后,CPU 就开始执行第一条指令。...之前说过,CPU 是很傻、很单纯,它只知道去 cs:ip 所指向地址处,取出一条指令,执行完之后,再取出下一条指令继续执行。。。...既然硬件初始化时,已经把 cs 初始化为 0xFFFF,把 ip 初始化为 0x0000,经过段寻址公式计算之后,就得到了物理地址:0xFFFF0,也就是说,CPU 执行第一条指令位于物理地址 0xFFFF0...此时,cs:ip 计算得到物理地址为 0xFFFF0,正好落在映射到 ROM 这块内存空间。 因此,从这个地址中获取到指令,其实就是从 ROM 中读取。...CPU 在执行指令时候,ip 寄存器是递增,也就是说从低地址到高地址,依次执行每一条指令。

1.7K30

ARP协议:地址解析协议

一台设备需要向另一台设备发送数据,它首先需要知道目标设备物理地址,因为在局域网内,数据包传输是通过物理地址进行。 ARP协议主要功能是建立和维护IP地址与物理地址之间映射关系。...具体而言,ARP工作过程包括: ARP请求(ARP Request): 设备A需要与设备B通信,但不知道设备B物理地址,设备A向局域网发送一个ARP请求广播。...ARP请求 一台设备需要与局域网内另一台设备通信,它首先检查自己ARP缓存(ARP Cache)中是否已经有目标设备物理地址。...如果缓存中没有目标设备物理地址,发送方将发起一个ARP请求广播,询问局域网中是否有与目标IP地址相对应物理地址。 2....一个计算机需要与另一台计算机通信,但在其ARP缓存中没有目标IP地址对应MAC地址,它会向本地网络广播ARP请求,请求其他计算机告诉它目标IP地址MAC地址。

37310

第二章 IBM-PC微机基本功能

具体包括: 取指令——根据CS寄存器和指令指针IP形成20位物理地址,从相应存储器单元中取出指令,暂存到指令队列中,等待EU取走并执行。...三、指令指针IP CPU在从存储器取指令,以段寄存器CS作为代码段基址指针,以IP内容作为偏移量,共同形成一条指令存放地址。...6.溢出标志位OF 运算结果超过机器用补码所能表示数范围,则OF置1,否则置0. 字节数据,机器用补码所能表示数范围为-128~+127。...三、逻辑地址与物理地址对应关系 1.物理地址 在1MB存储空间中,每个存储单元物理地址是唯一,它就是该存储单元20位地址。...3.逻辑地址转换为物理地址 CPU要访问存储器,需要由总线接口单元BIU将逻辑地址转换成物理地址

29720

《汇编语言》——笔记(一)

汇编语言发展至今,由以下3类指令组成: 汇编指令:机器码助记符,有对应机器码 伪指令:没有对应机器码,由编译器执行,计算器不执行 其他符号:如+、-、*、/ 等,有编译器识别,没有对应机器码。...8086CPU采用一种在内部用两个16位地址合成方法形成一个20位物理地址。 80806CPU要读写内存,提供两个16位地址被地址加法器合成一个20位物理地址。...段地址保存在8086CPU段寄存器中存放,有4个段寄存器:CS、DS、SS、ES。这里只介绍CS. CSIP CS为代码段寄存器,IP为指令指针寄存器。CS提供为段地址,IP提供了偏移地址。...CPU从何处执行指令是由CS:IP内容决定,修改CS:IP值就可以控制CPU执行目标指令。...PUSH、POP操作栈顶标记会发生改变,CPU如何知道这栈顶标记呢? 回想另一个问题,CPU如何知道当前要执行指令所在位置?CSIP所指指令存放着当前指令短地址和偏移地址。

1.1K20

甄建勇:五分钟搞定Cache(上)

所以如果采用directmapped的话,core在访问cache,根据TLB处理之后物理地址,进行取模(%)运算,就可以直接确定其cache位置,由于一个cacheline可能对应不同内存地址...所以,如果采用setassociative的话,core在访问cache,根据TLB处理之后物理地址,先将物理地址取模,得到其可能cache组,然后再依次与组内所有cachelinetag进行比较...写回是指,仅一个缓存块需要被替换回内存,才将其内容写入内存。如果缓存命中,则总是不用更新内存。...发生写失效,缓存可有两种处理策略,分别称为分配写(Writeallocate)和非分配写(No-writeallocate)。...对于不同组合,发生数据写操作行为也有所不同。 对于组相联缓存,一个组全部缓存块都被占满后,如果再次发生缓存失效,就必须选择一个缓存块来替换掉。存在多种策略决定哪个块被替换。

80441
领券