
汇编
文章平均质量分 92
小灰马
爱生活,爱读书,爱挑战!
展开
-
反汇编之函数调用
首先提出2个问题:1.函数调用时,参数是怎样传递的?2.函数调用时,函数内部的局部变量和函数的参数在栈中是如何布局的?参考资料:1.AT&T与Intel汇编语言的比较2.C++反汇编代码分析–函数调用3.栈溢出4.常见寄存器名称及其作用目前得出的结论:1.从函数A中调用函数B之前,如果参数少的话(少于cpu一些可用的通用寄存器个数)则会把参数放到寄存器里原创 2013-08-01 21:26:00 · 2175 阅读 · 0 评论 -
操作系统实践(9)——进程、多进程、系统调用、进程调度
这一章,与前面提到的特权级转移以及中断处理机制相关的知识关系很大。首先画个图了解下这几个概念的关系以及相互作用:以前一直很想知道系统调用是怎么实现的,看完书才明白系统调用跟普通的中断处理程序实现基本是相似的,可见中断处理程序是本章重点中的重点。梳理一下书中的思路: 1.首先实现一个简单的进程,注册一个时钟中断处理程序,在进程执行的过程中发生时钟中断,执行中断处理程序,返回进程被中断的地方继续执行。原创 2015-09-01 22:42:49 · 2135 阅读 · 0 评论 -
操作系统实践(7)——分页机制
为什么分页,分页有什么好处从苦逼码农的角度,用一个租房的例子来说,原来分段机制,就好比房子整租,当租客不想租的时候,就整个房子退还给房东,房东再找其它人整租,这样有个缺点,在北京,整租一套房子,很贵,而且很多租客都是一个人或者两个人,用不着租那么大,于是一方面房东如果找不到租客,房子就空闲着,一方面要是租客咬咬牙租下整套房子,很多房间也是很浪费。于是,下面要讨论的分页机制,就是现在市场上各种单间出租原创 2015-08-12 19:00:20 · 1351 阅读 · 0 评论 -
操作系统实践(8)——从Loader到内核
到目前为止,我们写的代码都是用汇编写的,汇编的缺点就是,第一遍写完了,回头再过来看,又忘了,晦涩难懂。其实我感觉,写汇编的好处,就是能让自己去多了解一下cpu还有其它硬件的结构。硬件的的架构,决定软件的实现方式,硬件就好比基因,软件就是一个个的动物个体。本次实践涵盖的内容包括《orange’s一个操作系统的实现》书中的第三章末尾、第四章、第五章。因为这些东西比较紧凑。捋一下思路: 1. 中断与异原创 2015-08-26 11:22:04 · 1485 阅读 · 2 评论 -
操作系统实践(5)——关于LDT
LDT与GDT类似,为局部描述符表。使用LDT有几个步骤: 1.在GDT中加一个表项,并增加一个描述符,假设为SelectorLDT; 2.像配置GDT表那样,配置好LDT表自己的描述符,并设置好相应的ldt的选择子,选择子有一位标识是ldt还是gdt; 3.加载LDT,使用lldt指令; 4.直接jmp ldt里面的选择子。跳转到LDT里的代码段,跟用GDT跳转代码段一样,都是通过 j原创 2015-06-01 23:10:44 · 1426 阅读 · 0 评论 -
操作系统实践(4)——从保护模式返回实模式
好吧,一开始我觉得从保护模式应该就是设置一下cr0然后jmp一下就回到实模式了,这个没必要去实践。不过看到书中里面有些代码觉得有些冗余,然后里面有段话也是没看明白,动手实践才恍然大悟。于渊在书中写这个例子的思路大概是这样的: 1. 从实模式中跳转进入保护模式。(参考前面几篇) 2. 在保护模式下,访问一个地址偏大点的(实模式寻址范围之外)内存块进行读写,验证一下保护模式寻址范围是不是比实模式寻原创 2015-05-08 16:38:51 · 1772 阅读 · 0 评论 -
操作系统实践(3)——火箭助推器
本次实践的目的:打破开机引导程序512字节的限制,并从实模式切换到保护模式。 我们知道,bios开机自检、找到启动设备后,把启动设备的第一个扇区加载内存0x7c00位置开始执行。前两次实践中,我们的引导程序小于512字节,这没造成什么问题。如果我们的引导程序超过512字节怎么办呢?我的第一个想法就是,利用加载到内存的这512字节,写个程序,把启动盘中真正的引导程序继续加载到内存中。看到《Ora原创 2015-04-26 23:24:33 · 1017 阅读 · 0 评论 -
操作系统实践(1)——从引导开始
第一段引导代码boot.asm org 07c00h mov ax,cs mov ds,ax mov es,ax call DispStr jmp $DispStr: mov ax,BootMessage mov bp,ax mov cx,16原创 2015-04-24 15:18:24 · 741 阅读 · 0 评论 -
操作系统实践(2)——工欲善其事,必先利其器
环境搭建1. 安装bochssudo apt-get install vgabios bochs bochs-x bximagesudo apt-get install build-essential libx11-dev libxrandr-dev libgtk2.0-dev上bochs官网下载源码包,这里下载的是bochs 2.6.7版。tar zxvf bochs-2.6.7.tar.gz原创 2015-04-24 19:06:03 · 1014 阅读 · 0 评论 -
[温故而知新] 《深度探索c++对象模型》——构造、析构、拷贝的语义
前言base class 的virtual或者 pure virtual 虚析构函数需要实现C的pure virtual function 可以有body两种初始化方式的效率比较虚拟继承下virtual base class 的构造在构造函数中调用虚函数赋值操作符前言好久没写博,已经好几个月花在为公司的项目填坑上,最近稍微能抽出点时间来写啦。这一章的知识点相对零散,书也翻译得乱七八糟的。原创 2016-04-11 01:08:21 · 705 阅读 · 0 评论