![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JOS
yazhouren
这个作者很懒,什么都没留下…
展开
-
JOS环境搭建
//真是狗血,2010那个课件的网站的JOS文件无法下载,只好改用2011课件的相关资料我的环境为:VMware 7.0,Fedora12GCC4.4.2GNU bash 4.0.33依据http://pdos.csail.mit.edu/6.828/2011/tools.html,搭建环境需要5步:1. 安装GITyum install git2. 获得QEMU破原创 2011-12-09 14:50:14 · 1221 阅读 · 0 评论 -
esp ebp eip 函数压栈
intel cpu的程序,关于函数调用压栈的过程,到底如何实现的? ESP,EBP,EIP都负责什么任务?我们现在要调用函数A, 有三个参数,a,b,c.。执行A函数,需要两部,第一步, 在进入函数之前,要将c,b,a依次压入栈中,然后进入到函数A中。第二步,开始执行程序。第一步具体的细节为:mov c 0xC(esp)mov b 0x8(esp)mov a 0x4(esp)原创 2012-07-08 14:21:32 · 2765 阅读 · 0 评论 -
BIOS 和 EFI 介绍及其启动光盘制作
原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-biosefi-boot/index.html概述现在不少安装光盘同时满足 EFI 平台和 BIOS 平台的引导要求,在本文中,学习如何制作同时满足 Legacy BIOS 平台和 EFI 平台启动的启动光盘。您将学习:Legacy BIOS 概述、启动过程介绍以及转载 2012-11-01 09:23:57 · 2694 阅读 · 2 评论 -
使用Qemu+gdb来调试内核
原文地址:http://blog.csdn.net/iamljj/article/details/5655169昨天听别人讲使用Qemu和gdb来实现源码级内核调试,今天试了一下,果然非常方便,现简单的记录一下。 Qemu是一个开源的虚拟机软件,能够提供全系统的仿真,可以运行在多个平台上,并仿真多个别的平台。Qemu虚拟机是采用动态翻译来实现CPU的仿真的,对硬件的依赖程度低,转载 2012-07-07 11:04:06 · 629 阅读 · 0 评论 -
GCC-Inline-Assembly-HOWTO
在Linux代码中很多地方都使用了这种形式的汇编语言,嵌入汇编程序的格式如下: __asm__ __volatile__ ( asm statements : outputs : inputs : registers-modified ); asm statements是一组AT&T格式的汇编语言语句,每个语句一行,由\n分隔各转载 2013-07-11 08:26:32 · 1151 阅读 · 0 评论 -
x86 assembly
1. 改变cs的指令:jmp,call原创 2013-07-11 20:53:54 · 865 阅读 · 0 评论 -
LAB1实验
Part 1:遇到问题1:我将JOS放在Windows的目录下 ,通过VMware设置共享该文件夹来编译JOS,但是Windows更改linux下设置的权限,导致GDB无法调试QEMU. 解决方法:将JOS放在虚拟机下的linux的目录下 2011.12.13问题2: make qemu-gdb启动qemu后,在令一个终端中gdb调试,则qemu关闭,原因不知 原因:可能是安装q原创 2011-12-13 16:38:54 · 1637 阅读 · 0 评论 -
LD 浅析 转
原文地址:http://www.cnblogs.com/cjjnjust/articles/1617086.htmlLD 浅析 转本文乃转载, 原作者的E-mail是zhanglei@sict.ac.cn. 完成于2005.11.5-2005.11.8 0. Contents1. 概论2. 基本概念3. 脚本格式4. 简单例子5. 简单脚本命令转载 2013-07-13 22:24:32 · 642 阅读 · 0 评论 -
Linux 环境下编译 0.11版本内核 kernel
原文地址:http://chfj007.blog.163.com/blog/static/173145044201132523034138/最近在看《linux内核0.11完全注释》一书,由于书中涉及汇编语言的地方众多,本人在大学时汇编语言学得一塌糊涂,所以实在看不下去了,头都大了只好匆匆看了个头尾(前面几章和最后一章)。看来即使有《九阴真经》这样的武功秘籍,内功不够也是修炼不出来神马来的。于转载 2013-07-05 10:51:57 · 2110 阅读 · 0 评论 -
lab2
Part2 question1: 虚拟地址。2013.7.17原创 2013-07-17 15:08:13 · 1325 阅读 · 0 评论 -
x86 calling conventions
原文地址:http://en.wikipedia.org/wiki/X86_calling_conventionsx86 calling conventionsFrom Wikipedia, the free encyclopediaThis article describes the calling conventions used on x86 ar转载 2013-07-28 11:32:51 · 956 阅读 · 0 评论 -
lab3
Part A:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2013.7.23原创 2013-07-23 13:56:08 · 1794 阅读 · 1 评论 -
lab4
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2013.7.29原创 2013-07-29 14:36:32 · 2002 阅读 · 0 评论 -
JOS lab1-4总结
感慨颇多呀!原来在一年前就计划要做这个实验,2011年的JOS只做了第一个实验就没有勇气再做下去了但是一直拖着,直到最近发生了一些事情,才又有激情来做这个实验,已经只能做JOS 2012了,真是惭愧!参考资料很重要:1. http://ruizhe.weebly.com/research.html 这个的内容比较新2. PKU 张迟JOS报告3. 华中科大邵志远原创 2013-08-04 22:36:35 · 1642 阅读 · 1 评论 -
为什么要有VMA和LMA两个地址?
这个问题我困扰了好久,做lab1的实验中,那个关于VMA和LMA的描述让我很是迷惑。今天看LD链接器的说明书info ld, 这里Basic Linker Script Concepts(3.1)节中写道:We need to define some basic concepts and vocabulary in order todescribe the linker script原创 2012-06-30 03:31:03 · 4542 阅读 · 10 评论 -
gdb使用及原理
原文地址:http://hi.baidu.com/selflinux/item/69ddb9804612f55b27ebd9d81、GDB对于基于GNU系统开发的程序员来说是最基本的东西,必须的。所以这篇学习总结中,不打算包括GDB的一般使用方法。因为这些东西必须是随手拈来的。所以也就不花时间来整理,我只把一些比较高级的应用在这里作一个整理。2、在编译链接程序时需要使用"-gg转载 2012-07-31 09:57:42 · 1317 阅读 · 0 评论 -
ELF文件格式
在介绍ELF格式之前,先简单说明一下可执行文件的生成流程:1)编写C源文件,或汇编源文件;2)准备共享库格式的目标文件(shared object file),如数学库、标准库;2)用编译器(compiler)将C编译成可重定位格式的目标文件(relocatable object file),用汇编器(assembler)将汇编源文件编译成可重定位格式的目标文件;3)用连接器(linker)将第二转载 2011-12-09 15:52:07 · 900 阅读 · 0 评论 -
JOS开始
硕士1年级的时候,学习过一段JOS,但是没有搞明白,现在有时间了,重新搞一搞学习课件地址http://pdos.csail.mit.edu/6.828/2009/schedule.htmlJOS是MIT的6.828课程,该课程主要分为两部分:第一部分,xv6 是MIT在2006完成的用于操作系统课程教学的东东(起初是根据John Lions在X86写的操作系统,叫JOS,后来改用标准C原创 2011-12-08 13:35:02 · 1165 阅读 · 0 评论 -
x86的启动过程
1. 上电,首先执行ljmp $0xf000,$0xe05b 即地址0xffff0,调转到bios,开始 执行bios bios负责PCI,显卡之类设备的初始化,并把可启动设备(软盘,硬盘,光盘)的引导扇区boot loader(第一个sector)拷贝到内存地址[0x7c00--0x7dff]之间,最后跳转到 CS:IP to0000:7c00,开始执行boot loader,将原创 2011-12-13 19:56:39 · 1422 阅读 · 0 评论 -
LMA和VMA
引用地址:http://lhsblog01.blog.163.com/blog/static/102004519201051023125131/ version: 20091004author: green-waste@163.com关于LMA和VMA,这个问题,有点点小复杂,不过,此处,我会把我的理解,尽量通过通俗的方式解释出来,以方便理解。当然,鄙人水平有限,难免有错,转载 2012-01-10 16:02:30 · 624 阅读 · 0 评论 -
X86cpu运行的什么格式代码? ELF还是Bin ?
ELF文件是一种格式,我们使用gcc编译出来的.o文件,和链接后生成的.out文件一般都是ELF格式的文件。Bin文件一般指的是连接器ld -b binary链接出来的或者用objcopy -b抽出来的文件。ELF和Bin文件都是二进制文件(binary file)。X86对于这两种可执行文件都是可以直接运行的。这里have some problem, the bin ca原创 2012-06-30 16:29:27 · 1097 阅读 · 0 评论 -
UNIX/LINUX 平台可执行文件格式分析
原文地址:http://www.ibm.com/developerworks/cn/linux/l-excutff/可执行文件相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者。可执行文件的大小、运行速度、资源占用情况以及可扩展性、可移植性等与文件格式的定义和文件加载过程紧密相关。研究可执行文件的格式对编写高性能程序和一些黑客技术转载 2012-07-11 15:34:51 · 708 阅读 · 1 评论 -
为什么每个程序执行都有内核地址空间和程序地址空间?
为什么每个用户态的程序映射到虚拟地址空间,都需要有内核地址空间和程序地址空间呢?因为程序地址空间最终都会调用系统调用,也就是内核的东东,所以每个程序要想执行,就必须有内核地址空间,也必须有程序地址空间。所用的application程序要想使用系统的资源,必须通过系统调用。例如,malloc分配内存等。那么,application可以直接通过内嵌汇编,调用I/O指令吗?这个应该是不可以的原创 2012-07-13 17:37:25 · 714 阅读 · 0 评论 -
ld链接脚本文件语法解析
原文地址:http://hi.baidu.com/keyflying/item/f3087d18f9577617e2f9866f连接脚本**************连接脚本的一个主要目的是描述输入文件中的节如何被映射到输出文件中,并控制输出文件的内存排布. 几乎所有的连接脚本只做这两件事情. 但是,在需要的时候,连接器脚本还可以指示连接器执行很多其他的操作.这通过下转载 2012-07-13 17:23:17 · 3191 阅读 · 0 评论 -
GNU Binutils
原文地址:http://www.gnu.org/software/binutils/The GNU Binutils are a collection of binary tools. The main ones are:ld - the GNU linker.as - the GNU assembler.But they also include:addr2line转载 2012-07-14 12:10:11 · 489 阅读 · 0 评论 -
gcc和g++的区别
参考1:http://www.linuxsky.org/doc/dev/200804/298.htmlgcc和g++都是GNU(组织)的一个编译器。误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要原创 2012-07-14 14:10:29 · 587 阅读 · 0 评论 -
程序如何使用系统调用?
我们自己写的程序,如何使用系统调用?在编译时,如何将系统调用表示?我猜测,我们的程序编译为二级制代码时,先对一些寄存器进行设置,然后跳入到int ox80中断,这样自然就进入到函数调用中去了。但是,为什么我们可以直接引用那些包含系统调用的头文件,然后直接使用系统调用? 因为系统调用函数里面,实现了我上面所说的过程。那这样的话,这个实现过程被包装成了什么? 动态库?例如系统调用函数头原创 2012-07-31 15:20:22 · 1179 阅读 · 0 评论 -
DDD(GDB图形前端)
参考文档:http://hi.baidu.com/dreammerge/item/6091095d420a9b444eff20b3GNU DDD是命令行调试程序,如GDB、DBX、WDB、Ladebug、JDB、XDB、Perl Debugger或Python Debugger的可视化图形前端。它特有的图形数据显示功能(Graphical Data Display)可以把数据结构按照图形的转载 2012-07-31 10:12:27 · 2029 阅读 · 0 评论 -
系统调用实现原理
原文地址:http://blog.chinaunix.net/space.php?uid=10678279&do=blog&id=2936392系统调用 1什么是系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件转载 2012-07-31 15:50:48 · 1263 阅读 · 0 评论 -
虚拟机如何实现的?
今天突然明白了,虚拟机也是读取指令,根据指令变化各个寄存器和内存,就这样一直变下去就是仿真了哈哈,以前一直没有想明白的道理!2017.7.18原创 2017-07-18 22:59:39 · 1020 阅读 · 0 评论