序言(废话) : 在看书的过程中发现一开始不是很能理解pmtest8的目的,以及书上说得很抽象..于是在自己阅读过源代码后,将一些自己的心得写在这里. 正文 : 讲解顺序依然按照书上贴代码的顺序来.但是是几乎逐句解释的.可能会稍微有点啰嗦.废话就不多说了直接贴代码. , 0fffffh, DA_CR|DA_32|DA_LIMIT_4K; 0~4G , 0fffffh, DA_DRW|DA_LIMIT_4K ; 0~4G SelectorFlatC equ LABEL_DESC_FLAT_C -…
感觉自己对于操作系统始终没有一个清楚的概念,尤其最近困扰于实模式.保护模式以及寻址方式等一些概念.转而一想,所有的程序,最终都是操作的计算机资源,需要和操作系统打交道,所以操作系统有必要深入了解一下.最终想要自己动手编写一个简单的版本,上网查.网友对于于渊的<Orange'S:一个操作系统的实现>和<30天自制操作系统>评价挺高的,先选<orange>为学习手册.<30>为参考手册,开始自己的操作系统之旅. 首先是平台的搭建问题,首先因本人编程一般都是在自己…
<Orange>这本书开篇第一章就做了一个实例,编写了一段引导扇区的代码,但是引导介质仍然采用了已被淘汰多年的软盘.在经历了两天的痛苦查找后终于找到了最方便的解决办法,在此做一下记录,希望能为有同样爱好的朋友提供一点点小帮助,省去不必要的麻烦. 一.安装virtualbox和常见问题排除 首先需要安装virtualbox,注意是必须用virtualbox,因为需要virtualbox创建的vhd格式虚拟硬盘,经过测试通过Windows磁盘管理创建的vhd虚拟硬盘不能使用,VMware通过改名创…
书中给出了两种环境:windows和linux,平台选择根据自己喜好.本人这里选择ubuntu10.04+virtualbox作为开发平台. 1.下载.安装VirtualBox     http://download.virtualbox.org/virtualbox/4.0.0/VirtualBox-4.0.0-69151-Win.exe 2.下载ubuntu安装文件 http://www.ubuntu.com/desktop/get-ubuntu/download 3.在VirtualBox…
实验目的: 掌握内存分页机制 对应章节:3.3 实验内容: 1.认真阅读章节资料,掌握什么是分页机制 2. 调试代码,掌握分页机制基本方法与思路 – 代码3.22中,212行---237行,设置断点调试这几个循环,分析究竟在这里做了什么? 3. 掌握PDE,PTE的计算方法 – 动手画一画这个映射图 4. 熟悉如何获取当前系统内存布局的方法 5. 掌握内存地址映射关系的切换 – 画出流程图 6. 基础题:依据实验的代码, – 自定义一个函数,给定一个虚拟地址,能够返回该地址从虚拟地址到物理地址的…
实验目的: • 如何从软盘读取并加载一个Loader程序到操作 系统,然后转交系统控制权 • 对应章节:第四章 实验内容: 1. 向软盘镜像文件写入一个你指定的文件,手 工读取在磁盘中的信息 2. 在软盘中找到指定的文件,读取其扇区信息 3. 将指定文件装入指定内存区,并执行 4. 学会在bochs中使用xxd读取反汇编信息 完成本次实验要思考的问题: 1.FAT12格式是怎样的? 2.如何读取一张软盘的信息 3.如何在软盘中找到指定的文件 4.如何在系统引导过程中,从读取并加载一个可执行文件…
https://github.com/yyu/osfs00 实验目的: 理解x86架构下的段式内存管理 掌握实模式和保护模式下段式寻址的组织方式. 关键数据结构.代码组织方式 掌握实模式与保护模式的切换 掌握特权级的概念,以及不同特权之间的转移 实验内容: 1. 认真阅读章节资料,掌握什么是保护模式,弄清关键数据结构: GDT.descriptor.selector.GDTR, 及其之间关系,阅读 pm.inc文件中数据结构以及含义,写出对宏Descriptor的分析 2. 调试代码,/a/ 掌…
实验目的: 理解中断与异常机制的实现机理 对应章节:第三章3.4节,3.5节 实验内容: 1. 理解中断与异常的机制 2. 调试8259A的编程基本例程 3. 调试时钟中断例程 4. 建立IDT,实现一个自定义的中断,功能可自 定义,如特定键盘组合触发某个动作.电子 钟.自己游走的字符显示.蜂鸣器等 5. 了解IOPL的作用 完成本次实验要思考的问题: 1.什么是中断,什么是异常 2.8259A的工作原理是怎样的? 3.如何建立IDT,如何实现一个自定义的中 断 4.如何控制时钟中断 5.IOP…
本文整理自多材料源,感谢原址分享,请查看末尾Url I, 汇编语言分类: 汇编语言和CPU息息相关,但是不能把汇编语言完全等同于CPU的机器指令.不同架构的CPU指令并不相同,如x86,powerpc,arm各有各的指令系统:甚至同一种架构的CPU有几套指令集,典型的如arm除了有32位的指令集外,还有一套16位的thumb指令集.但是作为开发语言的汇编,本质上是一套语法规则和助记符的集合,它可以包容不同的指令集.如果从CPU体系来划分,常见的汇编有两种:IBM PC汇编和ARM汇编. IBM…
本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令.逻辑计算指令.算数运算指令),以及函数的调用规则.个人认为:在理解了本文后,基本可以无障碍地阅读绝大部分标准X86汇编程序.当然,更复杂的指令请参阅Intel相关文档. 1 寄存器. 主要寄存器如下图所示: X86处理器中有8个32位的通用寄存器.由于历史的原因,EAX通常用于计算,ECX通常用于循环变量计数.ESP和EBP有专门用途,ESP指示栈指针(用于指示…
来自:https://www.cnblogs.com/jiftle/p/8453106.html 本文翻译自:http://www.cs.virginia.edu/~evans/cs216/guides/x86.html 参考资料:标识寄存器 本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令.逻辑计算指令.算数运算指令),以及函数的调用规则.个人认为:在理解了本文后,基本可以无障碍地阅读绝大部分标准X86汇编程…
C#可不可以嵌入汇编 可以 在我眼中C#作为一个介于中上层语言是不可能不可以 置入汇编代码的 为什么会被我认为中上层语言呢 从C#保留指针就可以看出 我知 道有很多人一定不会相信C#可以使用汇编代码 不过C#会比较麻烦C#不可以直接 内联汇编(inline-asm)准确的说C#只可以使用(auto-asm)动态汇编 这种技术不是 C#独有的 易语言.VB.C++ 三种语言都可以 不过动态汇编我见过最多的是被应 用在外挂方面 及远程汇编注入 实际上是属于动态汇编技术的一种扩展 不过很难 说JIT在…
综合研究:      在这部分内容中,将启示我们如何进行独立研究和深度思考(一定要注意这一点,相应的调整自己的学习思想).同时使我们:          (1)认识到汇编语言对于深入理解其他领域知识的重要性.          (2)对前面所学习的汇编语言知识进行融会.          (3)对用研究的方法进行学习进行体验.  研究实验1_搭建一个精简的C语言开发环境:  在运行过程中如果需要使用TC 2.0中的相关文件,就会出现文件找不到的错误,我们根据提示信息,就可以知道  找不到的是哪个…
在X86汇编中,MOV [0012H], [0016H]这种指令是不允许的,至少得有一个操作数是寄存器.当然,这种问题在用高级语言的时候看不到,感觉好像基本上都是从内存到内存啊,为毛到了汇编就不行了???这个问题在stack overflow有个解释不错: The answer involves a fuller understanding of RAM. Simply stated, RAM can only be in two states, read mode or write mode.…
Data Guard是Oracle高可用性HA的重要解决方案.针对不同的系统保护需求,DG提供了三种不同类型的保护模式(Protection Mode),分别为:最大保护(Maximum Protection).最大可用(Maximum Availability)和最大性能(Maximum performance).在实际应用场景下,我们需要根据不同的业务场景和数据可用性需求,来设置DG环境的保护类型. 1.三种保护模式Protection Mode 三种保护模式是DG的核心概念.DG本质上是一…
关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上.”的解决 一个项目需要在Win系统用计划任务执行PHP,写了个批处理bat利用php-cgi.exe进行执行PHP文件,由于在服务器运行为了不影响服务器既有的PHP配置信息,同时也是考虑未来的移植性还有性能问题,自己弄了个精简了的PHP运行环境. 可在Win下死活也是执行不了,运行批处理直接闪一下就啥都木有咧,于是为了看具体的状态,使用cmd命令行模式去运行批处理文件,结果提示“系统无法执行指定…
本文基于:OpenDaylight的C/S模式实验而成 C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销. 这个实验按照我的理解大概的一个意思是,在Mininet上建立两个主机,一个是服务器一个是主机,通过ODL控制器和一个Switch连接: 在其中一台主机h1上建立web服务,然后从h2远程访问h1,并下载一些内容,就完成了一个CS交互. 实验过程: 启动ODL:…
2016-11-18 记得之前看windows内核原理与实现的时候,在内存管理部分,看到涉及到PAE模式的部分,提到此模式下可以让系统在虚拟地址还是32位宽的情况下,支持64GB的物理内存或者更多.当时就没怎么想明白,今天突然想起就结合intel手册仔细研读了一番,但是手册所讲主要是其寻址过程以及各级页表和entry的结构,对如何支持这一说还真没有提到.于是乎,google.上论坛等等,初步对其有了认识,难免让人失望,因为其着实没有我想的那么玄乎,下面还是分享下: PAE模式是基于分页模式的,如…
x86汇编之十(使用字符串) 转自网络,出处不详 一.传送字符串 Intel提供了完整的字符串传送指令,就像是MOV指令一样. 1.MOVS指令 1)movs指令格式 把字符串从一个位内存位置传送到另一个内存内置,其指令隐含了源操作数与目的操作数.ATT有3条传字符串的指令的,分别是MOVSB,MOVSW,MOVSL. 指令 含义 源址 目址 MOVSB 传一个字节的字符 (%ESI) (%EDI) MOVSW 传一个字的字符 (%ESI) (%EDI) MOVSL 传4个字节的字符 (%ESI…
简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机. 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用.能用.轻量就行,如果觉得代码架构设计的不是很好的话,也不用过于吐槽哈.. 虽然我还有写过两个比较成熟的虚拟机项目(jvm和avm),虽然架构上比这个更完善,更容易扩展,功能也更强大 但是毕竟是给公司写的,没法拿出来分享.. 背景 先说说,为什么要写这个东西.. 之前有段时间,我在用ida逆向分析某些程序的算法,并且要把它提取出来将其跨平台运行,这个…
目录 x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式 一丶x86指令复习. 1.1什么是x86指令. 1.2 x86与x64下的通用寄存器 1.3 OpCode 1.4 7种寻址方式 二丶x86指令格式详解. 2.1 instruction 说明 2.2 Opcode 2.3 ModR/m说明 2.4 SIB说明 2.5 Displacement 偏移说明 2.6 immediate 立即数 二丶X64 汇编指令格式详解 x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式…
x86汇编利用int 16h中断实现伪多线程输入 我们都知道,如果想让一个程序,同时又干这个,又干那个,最好的办法就是多线程.这个在高级语言里面已经用烂了. 但是,DOS是只有单线程的.我如果想让程序在运行的同时,又能接受我键盘的输入,那要怎么办呢? 例如,我有一个DOS彩票开奖软件.屏幕上有十个数字在滚动,当我按下空格键的时候,它会停止跳动,按别的键无效.那么要怎么操作? 首先,接收输入最常用的是int 21h中断里的7号功能调用.但是它是一个中断输入,也就是为了接收这个输入,我的程序就暂停在…
什么是栈 栈与普通数据结构所说的栈的概念是相似的,遵循后进先出原则.不同的是汇编中所说的栈是一个在内存中连续的保存数据的区域,也即是实际存在的内存区域,进栈和出栈遵循后进先出原则. 在x86架构中,栈是向下生长的,即栈顶指针小于栈底指针. ESP ESP是x86架构中用于保存当前栈顶位置的寄存器.更多详细内容请参阅参考资料[1] 下面的两对代码是相互等价的 入栈操作: push eax ;修改栈顶指针 sub esp, 4 ; 由于是向下生长,所以esp - 4, 减去4是因为eax占4个字节…
X86汇编实现斐波那契数列 程序说明: 输入斐波那契数列的项数, 然后依次输出斐波那契数列, 输入的项数小于256且为数字, 计算的项数不能超过2^16次方, 输入失败是 不会回显数字 因为存结果是AX, 只有16位, 最大为2^16 = 65536,所以程序设置当输入过大时, 只会显示项数小于 65536前的项数 下面是程序的流程图 程序包括3个模块, 分别是主模块, INPUT模块(读取键盘中输入的合法数字), OUTPUT模块(输出数字) 主模块 INPUT模块 OUTPUT模块 代码及其…
SJTUBEAR 原创作品转载请注明出处 /<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 汇编 在修习LINUX内核这门课的初始阶段,首先需要掌握的就是汇编以及汇编程序对于堆栈的操作. 下面我们就来分析一下一个简单地C程序是如何被汇编程序所表达的! 2. 得到汇编代码 首先,我们写一个简单地C程序,命名为exp1.c: #include <stdio.h> int g(int x) { ;…
摘自:https://zhuanlan.zhihu.com/p/31670033 Rendertron:JavaScript Web 富应用的一个老问题是如何使这些页面的动态渲染部分可供搜索引擎检索.为此开发人员采用了各种各样的技巧,包括使用 React.js 的服务端渲染,外部服务或预渲染内容.现在谷歌 Chrome 新的 headless 模式又贡献了一个新的技巧—— Rendertron,即 Chrome的headless 渲染解决方案.它在一个 Docker 容器中封装了一个 headl…
LVS DR模式实验 三台虚拟机,两个台节点机(Apache),一台DR实验调度机 一:关闭相关安全机制 systemctl stop firewalld iptables -F setenforce 0 二:调度机配置 [root@localhost ~]# yum -y install ipvsadm                       #安装ipvsadm 配置负载分配策略 ipvsadm 工具参数说明: -A 添加虚拟服务器 -D 删除虚拟服务器 -C 删除所有配置条目-E 修改…
vue项目,打包后在IE11和360浏览器(都是IE内核)上运行,控制台报了strict 模式下不允许一个属性有多个定义这个错误,导致流程不能正常走下去,查资料后知道应该是定义了重复的属性,于是就开始找:终于找到了根源: 就是这里重复定义了href属性,so,问题解决!…
一. 反编译一种可能的实现方式 我们的目的是将多种平台的汇编如x86,ARM,6502反编译为c语言,所以实现时先将多种汇编转化为 特定虚拟机汇编语言,然后只需要将虚拟机汇编语言反编译为c语言.其中多种平台汇编语言到虚拟机汇编语言 也计划由程序通过学习自动完成. 二. 测试的C语句及编译后的x86汇编代码 int a; int main(void) { a = 2+3*4; return 0; } 1 lea rax, a 2 push rax 3 mov rax, 4 4 push rax 5…
一. 测试的C语句及编译后的x86汇编代码 int a; int b; int main(void) { int c; if (c) a = 4; else b = 5; return 0; } 1 .text:0000000000400457 push rbp 2 .text:0000000000400458 mov rbp, rsp 3 .text:000000000040045B sub rsp, 10h 4 .text:000000000040045F mov [rbp-10], rsp…