![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序原理与操作系统
谁不小心的
过于复杂,无法简介
展开
-
程序员的自我修养——Linux下的环境变量原理与shell
概述:在linux下工作,经常会出现这样的情况:1)运行某个命令,出现提示-bash:【commandname】:command not found2)执行某个ELF可执行文件:xyz@hnode02:~/Downloads/software/bean/workdir>./bean.exe./bean.exe:error while loading shared libra原创 2013-04-16 10:50:51 · 3258 阅读 · 0 评论 -
BIOS 工作流程解析
学习linux很长时间了,一直没有时间把经验和挖掘的一些技巧整理出来,这个暑假在家没事,整理了一些与大家分享。由于都是自己的理解和实验产物,所以肯定有些不当之处,期待交流指正! 这个系列文章将以Ubuntu探秘命名,内容涉及到整个开机流程及GNOME桌面的hack . 今天发表第一篇心得:BIOS到底干啥用? BIOS(basic input/output system,基本输入输出转载 2013-05-19 16:09:43 · 1979 阅读 · 0 评论 -
保护模式编程之(一)——分段机制与GDT/LDT
概述:若想理解操作系统程序中的启动相关的部分,必须要理解保护模式下的编程,而分段机制是保护模式编程下的基础。另外,由于实模式与保护模式的不同,对保护模式下的分段机制更需要注意。同时,这一部分的基本数据结构是以后理解代码跳转的基础,必须要熟练。1.段的定义 段是虚拟地址到线性地址转换的基础,段的特征有以下三个:段基址,段限长,段属性。这三个特征存储在段描述符(s原创 2013-05-24 10:51:31 · 4307 阅读 · 0 评论 -
CPL DPL RPL的区别 &&一致性代码段和非一致性代码段
概述:在谈论保护模式编程的时候,一直会有这样的困惑:为什么除了CPL和DPL还有RPL?什么时候高特权级不能访问低特权级?什么时候低特权级不能访问高特权级?一致性代码和非一致性代码有什么区别?等等这些问题,如果仅仅停留在知其然的级别,很容易会困惑,本文主要说明以上问题的答案和蕴涵在背后的原因。1.特权级 首先,了解以下操作系统的特权级 1)CPL是存寄原创 2013-05-24 09:47:01 · 3623 阅读 · 1 评论 -
处理器位数&&操作数位数&&操作系统位数&&地址总线位数&&指令位数 的区别
摘要:我们经常听到这几个名词“处理器位数&&操作数位数&&操作系统位数&&地址总线位数&&指令位数的区别“,但是这几个名词之间有什么区别,又有什么联系?本文主要为你解答这些困惑!1.处理器位数CPU一次能够处理的最大位数,本质上与ALU相关,体现在寄存器上,例如16b处理器中只有ax,32b中就是eax,64位处理器中就是rax。如果我们将总长128位的指令分别按照16位、32原创 2014-03-02 22:38:12 · 4486 阅读 · 0 评论 -
elf 文件格式探秘——程序运行背后的故事
摘要:本文主要讲解elf文件格式,通过readelf命令结合底层的相关数据结构,讲解相关内容,分析程序运行的基本原理。原创 2013-08-27 16:40:51 · 6013 阅读 · 0 评论 -
从C文件到可执行elf文件
摘要:本文主要为你解释一个C文件是如何被一步步处理成可执行的elf格式文件的。本文来源: 从C文件到ELF 说明:所有本文的用例是以下hello.c程序:#includeint main(int argc, char *argv[]){ printf("hello world\n"); return 0;}1.预处理原创 2013-09-24 15:01:14 · 4351 阅读 · 2 评论 -
程序员的自我修养——库与链接的原理
连接原理 简介:开发大型程序的时候,往往要多人协作,编写库进行共享,从而提高效率。那么库的原理是什么?和每个源程序是如何结合在一起的?程序的装载过程是什么样的?本文主要解释了这些问题,链接的原理和库文件的编写和使用。1.1连接器的任务连接器将多个目标文件连接成为一个完整的、可加载的、可执行的目标文件。其输入是一组可重定位目标文件。任务如下:符号解析:将目标文件内原创 2013-04-15 20:59:32 · 2227 阅读 · 0 评论 -
32位与64位 CPU、编译器、操作系统与应用程序的区别
1.64b的操作系统和64b的CPU是如何诞生的?我们都知道,制造多少位的CPU是相对独立的,但是,操作系统呢?我们能在32b的机器上编写一个64b的操作系统吗?想一想,如果我需要用C语言编写一个64b的操作系统,那么需要哪些条件?2.32b应用程序是否可以运行在64b机器上?64位系统是否可以运行在32b机器上?前者可以,后者不可以。3.应用程序、编译器、操作系统原创 2014-04-18 16:56:07 · 4147 阅读 · 0 评论 -
linux strings 命令——ELF文件格式与“链接和装载”
一 string命令详解string命令主要用来查看非文本格式的文件中的ASCII字符串——当然, 也可以查看文本形式的文件对应字符串。命令的使用形式如下:[22:41huangyk@leetcode]$>strings -a numDistinct | grep lib/lib64/ld-linux-x86-64.so.2libstdc++.so.6libm.so.6原创 2014-06-08 22:51:10 · 2011 阅读 · 0 评论 -
守护进程
本文,主要讲解守护进程的定义和相关的原理,并通过一个用户实例来说明如何编写守护进程。1.守护进程的撰写条件:1)D要在系统中处于一直运转的状态,也就是说while循环,时刻在监听服务2)D不能在关闭终端的时候退出—— 为什么终端关闭将导致进程退出呢?3)D要脱离控制终端,登录会话和进程组—— 注销的时候,为什么有的进程将被注销,而有的不会?2.相关原理Q原创 2014-10-14 14:47:55 · 2095 阅读 · 0 评论 -
进程通信之linux信号机制
摘要:本文主要介绍,linux进程通信中的信号机制,介绍信号的本质与作用原理;重点讲解信号的处理流程,同时介绍了信号的安装\发送\阻塞等概念.原创 2015-03-17 09:56:10 · 1362 阅读 · 0 评论 -
僵尸进程
1.僵尸进程与孤儿进程僵尸进程:如果子进程先于父进程退出,此时子进程便成为一个尸体;此前,如果父进程没有调用wait等相关系统调用,那么子进程便成为僵尸进程.孤儿进程:如果父进程先于子进程退出,那么子进程变成为孤儿进程,将被init进程领养.2.进程相关数据结构进程控制块PCB:保留了进程运转时所需要的全部信息,是进程表中的一个entry.当以fork()系统调用建立一个新的进程后,核心进原创 2015-03-14 10:27:29 · 2115 阅读 · 0 评论 -
gcc指定头文件及动态链接库路径
在利用源代码进行软件编译的过程中,经常会出现以下错误:undefined reference to ‘crypt’libdl.so: error adding symbols: DSO missing from command lineopenssl/rsa.h: no such file or directory这些都是软件编译、链接过程中找到不相关头文件或者动态链接库导致的。本文主要讲解原创 2015-09-16 11:27:04 · 4225 阅读 · 0 评论 -
从汇编视角看函数调用
C语言函数如下int bar(int c, int d){ int e = c + d; return e;}int foo(int a, int b){ return bar(a, b);}int main(void){ foo(2, 5); return 0;}让我们从汇编的角度跟踪函数的执行,main对应的汇编函数如下:Dump of a转载 2017-08-03 18:49:20 · 1323 阅读 · 0 评论 -
Linux启动过程前传——前世BIOS与今生OS
概述:我们经常讨论操作系统的启动过程,但是却很少讨论操作系统启动之前的过程。BIOS除了开机自检,还完成了哪些工作?CPU厂家,BIOS厂家,OS厂家是如何协作从而保证计算机的运行的?如何保证硬件能认识操作系统,并且听从操作系统的指挥?所有boot sector的第一句可执行汇编语句往往是 mov ax,cs,此时,cs的值来自于哪里呢?是随机的吗?为何boot sector的汇编指令中第一个伪操原创 2013-05-14 16:47:20 · 3205 阅读 · 0 评论 -
《自己动手写操作系统》第三章a/pmtest1.asm
[html] view plaincopy 1 ; ========================================== 2 ; pmtest1.asm 3 ; 编译方法:nasm pmtest1.asm -o pmtest1.com 4 ; ==========================================转载 2013-05-27 10:31:21 · 2508 阅读 · 0 评论 -
将目标文件的一部分或者全部内容拷贝到另外一个目标文件中 objcopy
objcopy [选项]... 输入文件 [输出文件] [功能] 将目标文件的一部分或者全部内容拷贝到另外一个目标文件中,或者实现目标文件的格式转换。 [描述] objcopy工具使用BFD库读写目标文件,它可以将一个目标文件的内容拷贝到另外一个目标文件当中。objcopy通过它的选项来控制其不同的动作,它可以将目标文件拷贝成和原来的文件不一转载 2013-08-27 17:13:55 · 2943 阅读 · 0 评论 -
objdump - display information from object files
因为计算机大都是采用哈佛结构,数据和指令分开存储的的程序组织形式,因此当我门编译,汇编,连接,(符号解吸,段的重定位)。而为了能让程序更好的被执行,最终生成的目标文件包含了足够多了信息生怕自己被歧视而不被执行。所以面对2进制的目标文件来说,我门是很难发现或者看到什么有用的信息,因此objdump这个工具的实际意义是多么的令人喜爱,只有当你要探索一个目标文件的组织形式的时候就能体会了转载 2013-08-27 17:21:04 · 1215 阅读 · 0 评论 -
DSO(dynamic shared object)动态共享对象的原理
摘要:可执行ELF文件的生成,如果从源文件c开始算起,需要经过编译、链接、装载几个步骤。在链接和装载这两个步骤中,有两种不同的实现方式,一种是静态链接,这样加载之前,已经形成可执行目标文件;另外一种是动态链接,这种模式下,链接阶段只是链接一部分目标文件,动态链接库(DSO)在装载的时刻才会映射到进程地址空间。本文主要讲解DSO的原理。1.装载过程涉及的问题当程序被装载时,系统的原创 2013-12-02 10:40:22 · 3561 阅读 · 0 评论 -
linux守护进程原理及创建详解
在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。一. 守护进程简介转载 2013-12-10 23:57:03 · 1586 阅读 · 0 评论 -
100个最常见Linux守护进程简介
1.alsasound:Alsa声卡驱动守护程序。Alsa声卡驱动程序本来是为了一种声卡Gravis UltraSound(GUS)而写的,该程序被证明很优秀,于是作者就开始为一般的声卡写驱动程序。Alsa和OSS/Free及OSS/Linux兼容,但是有自己的接口,甚至比OSS优秀。2.acpid:acpid(Advanced Configuration and Power Interf转载 2013-12-11 00:04:10 · 2620 阅读 · 0 评论 -
linux系统安装文件&&安装过程分析&&kickstart文件分析
摘要:虽然经常安装操作系统,但你有没有想过,操作系统安装的时候都做了哪些工作?系统安装的本质是什么?在操作系统安装之前,系统是怎么从裸机上起来的?等等问题。本文主要以Centos系列的linux为例,向你详细解释操作系统安装的详细过程,引导程序,系统内核,livecd,installer等的区别和联系。本文主要为你解答这些问题1.发行版本中包含的文件首先,我们来看一下一个传统的发行原创 2013-12-30 12:52:00 · 3864 阅读 · 0 评论 -
perf 性能分析实例——使用perf优化cache利用率
摘要:本文主要讲解如何使用perf观察程序在缓存利用方面的瓶颈,进而优化程序,提高cache命中率。主要讲解提高缓存利用的几种常用方法。1.程序局部性一个编写良好的计算机程序通常具有程序的局部性,它更倾向与引用最近引用过的数据项,或者这个数据周围的数据——前者是时间局部性,后者是空间局部性。现代操作系统的设计,从硬件到操作系统再到应用程序都利用了程序的局部性原理:硬件层,通原创 2013-12-16 11:11:47 · 19918 阅读 · 6 评论 -
汇编基础——常用寄存器及其用途
通用寄存器的主要用途寄存器的分类寄存器主 要 用 途通用寄存器数据 寄存器AX乘、除运算,字的输入输出,中间结果的缓存AL字节的乘、除运算,字节的输入输出,十进制算术运算AH字节的乘、除运原创 2013-05-14 19:50:08 · 2063 阅读 · 2 评论 -
自己动手写操作系统--搭建保护模式下的运行环境:bochs下安装freedos
在进行保护模式的运行环境配置前,先看了了下书上的代码,编译运行结果如下:nasm 3_pmtest1.asm -o pmtest1.bin,可以看到界面出现了红色的 p 字 保护模式环境配置1:在网站http://bochs.sourceforge.net/guestos/freedos-img.tar.gz 上下载FreeDos,转载 2013-05-24 15:37:50 · 3568 阅读 · 2 评论 -
Int 10 中断功能
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 10H。底下是它们的说明:AH功 能转载 2013-05-24 16:57:45 · 3128 阅读 · 0 评论 -
《自己动手写操作系统》第二章——Bochs调试及相关仿真工具的使用方法
<!--p {margin-bottom:0.08in}-->关键词:bochs,自己动手写操作系统 一 安装具有调试功能的bochs注意:安装bochs以后,常常发现bochs不能调试,原因如下:$ sudo apt-get install vgabios bochs bochs-x bximage 敲入这样一行命令,不一会儿就装好了原创 2013-05-24 17:01:05 · 2306 阅读 · 0 评论 -
实模式与保护模式解惑之(一)——二者的起源与区别
概述:实模式和保护模式是处理器发展的两个非常重要的阶段。这两个模式下的编程也有着显著的不同,弄明实模式与保护模式的区别是理解操作系统运行原理和编写操作系统的基础。本文主要讲解了实模式和保护模式的区别和保护模式的起源,侧重点在二者寻址方式上的差异。1.保护模式的起源 最开始的程序寻址是直接的“段:偏移”模式,这样的好处是所见即所得,程序员指定的地址就是物理地址,物理地址对程原创 2013-05-21 11:42:18 · 13200 阅读 · 2 评论 -
bochs调试方法与指令详解
bochs调试FAQ:一 基本调试命令1. Q:如何从引导扇区开始设置断点?A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的, 所以我们可以在启动bochs调试的命令行下输入 pb 0x7c00 或者 vb 0:0x7c00就着输入 cbochs就会在0x7c0原创 2013-05-27 10:11:11 · 3607 阅读 · 0 评论 -
《自己动手写操作系统》第一章 boot.asm源码剖析
1.代码: org 07c00h ; 告诉编译器程序加载到7c00处 mov ax, cs mov ds, ax mov es, ax call DispStr ; 调用显示字符串例程 jmp $原创 2013-05-24 19:40:30 · 4780 阅读 · 1 评论 -
栈破坏下crash的分析方法
在众多的coredump中,有一类crash调试起来是最麻烦的,那就是“栈被破坏”导致的函数调用回溯结构破坏引发的coredump。本文,主要讲讲这一类crash的成因、原理以及调试方法。1. SMTC(show me the code)首先,让我们来看一段代码#include &lt;stdio.h&gt;#include &lt;string.h&gt;void fun(int n...原创 2019-02-13 10:30:57 · 2772 阅读 · 0 评论