intelx86为何从0xFFFF0处执行】的更多相关文章

第一条指令的地址 在用户按下计算机电源开关之后,CPU会自动的将其CS寄存器设定为0xFFFF,将其IP寄存器设定为0x0000.由于CS:IP指出了下一条指令的地址[1],因此CPU会跳到0xFFFF:0x0000处进行执行.为什么是这个地址而不是其它地址呢?这其实是一个很巧妙的设计. 我们知道,从80386开始,到后面80486.奔腾,它们都是32位的CPU,但是它们都与Intel先前开发的8086兼容.也就是说,在默认情况下,80386.80486等,只不过是一台运行得更快一些的8086罢…
嵌入式笔试题:想让程序跳转到绝对地址0x100000处执行,该如何做? 请详细解释一下所给的答案: 网上看到有如下答案: *((void(*)(void))0x100000)(); 经过在VC++6.0和LINUX gcc4.4.3下测试,均不能通过编译. VC++6.0报错:error C2100: illegal indirection GCC报错:error: void value not ignored as it ought to be 应该是怎么写呢? 经过测试,有两种方法: 答案1…
本文基于node 0.10.22版本 关于EventLoop是什么,请看阮老师写的什么是EventLoop 本文讲述的是EventLoop中的执行顺序(着重讲setImmediate, setTimeout/setInterval, I/O的顺序) 首先看看github上看到的nodejs eventloop 的图解, 来源于https://github.com/joyent/node/issues/6034#issuecomment-30017889 (注意图中timers处process.n…
java应用程序的启动在/hotspot/src/share/tools/launcher/java.c的main()函数中,而在虚拟机初始化过程中,将创建并启动Java的Main线程.最后将调用JNIEnv的CallStaticVoidMethod()来执行main方法. CallStaticVoidMethod()对应的jni函数为jni_CallStaticVoidMethod,定义在/hotspot/src/share/vm/prims/jni.cpp中,而jni_CallStaticV…
 转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小的跨度,而且代码也比较复杂.所以这里,我利用一些时间,整理下erlang代码的执行过程,从erlang代码编译过程,到代码执行过程做讲解,然后重点讲下虚拟机执行代码的原理.将本篇文章,献给所有喜欢erlang的人.   erlang代码编译过程 erlang对开发者是友好的,从erlang程序文件编…
方法1 若有SQL脚本a.sql, b.sql, 其目录在f盘根目录下, 则可再写一个SQL脚本c.sql(假设其目录也在f盘根目录下, 也可以在其他路径下)如下: source f:/a.sql; source f:/b.sql; 然后执行source f:/c.sql 即可. 方法2 方法1的不便之处在于, 要为每个脚本写一句代码, 若有成千上万个, 这样写便不现实. 此时, 可用批处理来实现. 以执行f:\test\目录下所有的SQL脚本为例, 其批处理代码如下: @echo off fo…
java应用程序的启动在在/hotspot/src/share/tools/launcher/java.c的main()函数中,而在虚拟机初始化过程中,将创建并启动Java的Main线程.最后将调用JNIEnv的CallStaticVoidMethod()来执行main方法. CallStaticVoidMethod()对应的jni函数为jni_CallStaticVoidMethod,定义在/hotspot/src/share/vm/prims/jni.cpp中,而jni_CallStatic…
原作者:AdminTony 原文链接:http://www.admintony.com/无回显代码执行利用方法.html 在Root-Me上有一道代码执行的题目,其链接为题目链接 0x01 简介 打开题目以后,在输入框中提示127.0.0.1 输入127.0.0.1 && whoami进行测试: 提示Syntax Error. 通过测试,发现127.0.0.1%0d%0awhoami可以执行成功. 0x02 尝试DNSLOG获取回显 使用反引号执行代码,并用curl将执行结果返回给DNSL…
对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束,才将控制权还给调用者. 前文介绍过,当执行 Python 代码时,会先将代码编译成字节码,然后在虚拟机中解释执行字节码,编译好的字节码会保存在 .pyc 或 .pyd 扩展名的文件里.在运行时,虚拟机会创建字节码执行的上下文环境,Python 模拟 C 语言中的运行栈作为运行时的环境,使用PyFr…
如图所示为 X86 PC 上从上电/复位到运行 Linux 用户空间初始进程的流程.在进入与 Linux相关代码之间,会经历如下阶段. ( 1 ) 当系统上电或复位时, CPU 会将 PC 指针赋值为一个特定的地址 0xFFFF0 并执行该地址处的指令.在 PC 机中,该地址位于 BIOS 中,它保存在主板上的 ROM 或 Flash 中. ( 2) BIOS 运行时按照 CMOS 的设置定义的启动设备顺序来搜索处于活动状态并且可以引导的设备. 若从硬盘启动, BIOS 会将硬盘 MBR(主引导…
转载:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html   从主引导记录到第一个用户空间应用程序的指导 引导 Linux® 系统的过程包括很多阶段.不管您是引导一个标准的 x86 桌面系统,还是引导一台嵌入式的 PowerPC® 机器,很多流程都惊人地相似.本文将探索 Linux 的引导过程,从最初的引导到启动第一个用户空间应用程序.在本文介绍的过程中,您将学习到各种与引导有关的主题,例如引导加载程序.内核解压.初…
原文地址:http://www.cnblogs.com/fnng/archive/2012/03/19/2407162.html 本文只是转载供自己学习之用 2012-03-22 13:31 by 虫师, 2343 阅读, 5 评论, 收藏, 编辑 今天是辞职后的第一天,本来想写写工作总结,还有许多东西需要整理和学习.这是我继毕业之后的第二次焦虑和迷茫.希望我能早点找到工作吧! 步入正题,其实,linux要学的东西非常多.不是我分个上.中.下三篇博文就能写完的.不过,既然弄了个“上”出来,题目我…
随着Linux的应用日益广泛.特别是在网络应用方面,有大量的网络server使用Linux操作系统.因为Linux的桌面应用和Windows相比另一 定的差距.所以在企业应用中往往是Linux和Windows操作系统共存形成异构网络.在server端大多使用Linux和Unix的,眼下Linux的擅 长应用领域是单一应用的基础server应用,譬如DNS和DHCPserver.Webserver.文件夹server.防火墙.文件和打印server.Intranet代理server .启动 Lin…
[原文]https://www.toutiao.com/i6594210975480545800/ 1.概述 图 1 是我们在20,000 英尺的高度看到的视图. 当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码.在个人计算机(PC)中,这个位置在基本输入/输出系统(BIOS)中,它保存在主板上的闪存中.嵌入式系统中的中央处理单元(CPU)会调用这个重置向量来启动一个位于闪存/ROM中的已知地址处的程序.在这两种情况下,结果都是相同的.因为PC提供了很多灵活性,BIOS必须…
Lab 3: User Environments实验报告 tags:mit-6.828 os 概述: 本文是lab3的实验报告,主要介绍JOS中的进程,异常处理,系统调用.内容上分为三部分: 用户环境建立,可以加载用户ELF文件并执行. 建立异常处理机制. 提供系统调用的能力. Part A: User Environments and Exception Handling 本实验指的用户环境和UNIX中的进程是一个概念,之所有没有使用进程是强调JOS的用户环境和UNIX进程将提供不同的接口.…
主要描述 boot/目录中的三个汇编代码文件,见列表 3-1 所示.正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式.bootsect.s 和 setup.s 采用近似于 Intel 的汇编语言语法,需要使用 Intel  8086 汇编编译器和连接器 as86 和ld86,而 head.s 则使用 GNU 的汇编程序格式,并且运行在保护模式下,需要用 GNU 的 as 进行编译.这是一种 AT&T 语法的汇编语言程序. 使用两种编译器的主要原因是由于对于 Intel …
C 语言嵌入式系统编程修炼之一:背景篇 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C 语言:一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择. 实际上,大多数嵌入式系统的硬件平台包括两部分: 以通用处理器为中心的协议处理模块,用于网络控制协议的处理: 以数字信号处理器(DSP)为中心的信号处理模块,用…
Lab1:Booting a PC 概述 本文主要介绍lab1,从内容上分为三部分,part1简单介绍了汇编语言,物理内存地址空间,BIOS.part2介绍了BIOS从磁盘0号扇区读取boot loader到0000:7c00处,并将cs:ip设置成0000:7c00.boot loader主要做两件事: 创建两个全局描述符表项(代码段和数据段),然后进入保护模式 从磁盘加载kernel到内存 part3主要介绍进入内核后的一些操作: 首先会开启分页模式. 格式化输出字符串的原理.本质还是往物理…
http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26042   1)BIOS自检2)启动Grub/Lilo3)加载内核4)执行init进程5)通过/etc/inittab文件进行初始化6)登陆Linux 1)BIOS自检   a)POST(Power On Self Test),对硬件进行检测   计算机在通电后首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测   依据B…
早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序.尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化. 让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了.然后将回顾一下在各个步骤到底发生了什么.在整个过程中,参考一下内核源代码可以帮助我们更好地了解内核源代码树,并在以后对其进行深入分析. 概述 图 1 是我们在 20,000 英尺的高度看到的视图. 当系统…
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系统开发的最佳…
早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序.尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化. 让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了.然后将回顾一下在各个步骤到底发生了什么.在整个过程中,参考一下内核源代码可以帮助我们更好地了解内核源代码树,并在以后对其进行深入分析. 概述 图 1 是我们在 20,000 英尺的高度看到的视图. 图 1…
1,当系统上电或复位时,CPU会将PC指针赋值为一个特定的地址0xFFFF0并执行该地址处的指令.在PC机中,该地址位于BIOS中,它保存在主板上的ROM或Flash中 2,BIOS运行时按照CMOS的设置定义的启动设备顺序来搜索处于活动状态并且可以引导的设备.若从硬盘启动,BIOS会将硬盘MBR(主引导记录)中的内容加载到RAM.MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱面1扇区).当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR 3,主引导加载程序查找并…
  大学前两年一直搞的是单片机,写的是嵌入式C语言程序,走过了不少弯路,现在感觉仍然在走弯路.有幸偶尔看到了这篇文章,深感自己以前写程序的时候存在很多误区.现写篇博客做下总结. 作者:宋宝华出处:天极网责任编辑: 方舟 [ 2005-06-14 14:45 ] 第一篇 软件架构篇 1.1 模块划分   模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在程序的划分上主要依据功能(依功能进行划分在…
计算机究竟是如何执行起来的呢,在我学习计算机的时候一直不是非常明确,可是近期借了本<linux内核设计的艺术>算是知道了计算机从按开机到启动操作系统之间究竟做了些什么. 这本书刚開始介绍的并非linux的启动,而是linux启动之前的一步,也就是在你按下了开机button之后进入系统引导之前计算机做的事情,这个时候做的事情是每台执行操作系统的计算机都须要做的.大致的步骤也差点儿相同,OK,进入正题. 事实上在当我们按了开机键的时候,硬件电路将CPU的CS设置成0XF000,IP设置成0XFFF…
深入理解Linux启动过程       本文详细分析了Linux桌面操作系统的启动过程,涉及到BIOS系统.LILO 和GRUB引导装载程序,以及bootsect.setup.vmlinux等映像文件,并结合引导.启动原理和具体的代码实现机制由浅入深地进行了分析.     初学者刚接触Linux桌面系统会感觉系统启动速度较慢,那么,为什么它的启动速度慢呢?本文就桌面系统的引导和启动过程展开分析,以期对初学者熟悉Linux有所帮助. 一.Linux系统的引导过程     简单地说,系统的引导和启动…
前言 今天本来的任务看书和把之前写的FragileOS整理一下,但是到现在还在摸鱼,书也只看一点.后来整理了一下写这个系列的思路,原本的目的是对操作系统原理性的学习和对之前写的一个玩具型操作系统的回顾,就是想对操作系统的知识的轮廓能有一个了解,现在想来想减少对之前写的系统的回顾,毕竟也只有2000多行,但是还是要有对整个思路的展现.然后增加对Linux 0.12源码的一些学习.所以离标题可能比较远了一点,但是就这样吧 什么是操作系统 原本这一节是写计算机系统和操作系统概述的,但是写到一半觉得太水…
1. Bochs调试 参考:http://www.cnblogs.com/long123king/p/3414884.html http://bochs.sourceforge.net/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=http://bochs.sourceforge.net/doc/docbook 类似的文章:http://www.cnblogs.com/wanghj-dz/archive/2011/05/12/2044862…
前言 最近觉得自己之前蛮多基础课学的并不咋滴,便想再补补.前段时间突然看到清华的操作系统实验,于是乎就打算试试,一边学一边做实验,然后通过博客来记录记录. 实验内容 lab1 中包含一个 bootloader 和一个 OS.这个 bootloader 可以切换到 X86 保护模式,能够读磁盘并加载 ELF 执行文件格式,并显示字符.而这 lab1 中的 OS 只是一个可以处理时钟中断和显示字符的幼儿园级别 OS. 练习 练习1:理解通过make生成执行文件的过程. 1.操作系统镜像文件ucore…
用户按下开机键,几秒的时间,都经历了啥? 1.cpu各个寄存器赋初始值,cs.base=0xffff0000, eip=0xfff0,其他寄存器都是0,这时cs:ip得到的物理地址:0xfffffff0; cpu上电后为啥会把cs:ip赋成这种初始值了? 可能是希望把BIOS-ROM放在可寻址4GB最高端,给操作系统和用户程序大段完整的RAM空间,便于后者在运行时的内存管理 2.cpu跳转到0xffff0执行.但由于该地址距离0xfffff(实模式下内存空间只有1M)仅16byte,空间十分有限…