Linux
文章平均质量分 76
FirMoonLight
这个作者很懒,什么都没留下…
展开
-
x86的DPL,RPL,CPL
此时JMP和CALL指令对此的处理是不同的:对于nonconforming code segment,调用CALL指令时,如果CPL >= DPL, 就会发生控制转移;而调用JMP指令时,必须CPL == DPL才会发生控制转移。对于conforming code segment,调用CALL指令和JMP指令时,如果CPL >= DPL就会发生控制转移。原创 2022-09-30 21:53:05 · 2217 阅读 · 1 评论 -
读写锁排查思路
表示没有线程持有读锁,也没有线程持有写锁,但是读写锁的值却异常了。只有两种可能,一是未初始化,二是内存被改写。走查代码,发现两个构造函数中,只有一个构造函数初始化了读写锁。从读写锁的逻辑看出,如果在读锁加锁的时候,不为0,那么就会阻塞读锁。原创 2022-09-02 09:18:50 · 229 阅读 · 0 评论 -
__x86.get_pc_thunk.bx对GDB打印局部变量的影响
MIT6.828原创 2022-08-26 22:13:25 · 493 阅读 · 0 评论 -
ld脚本简述
当链接器将可重定位文件通过重定位等操作生成可执行程序的时候,链接脚本可以控制输入文件中的各个段在生成文件中的位置,并且可以规定生成的可执行文件加载入内存之后的空间布局。链接器ld默认使用其内部的连接脚本,因此在一般情况下,我们都不需要对其进行修改。在使用ld的时候,通过-T选项,可以使用自己写的链接脚本完成链接过程,否则会使用默认的链接脚本。原创 2022-08-22 00:08:08 · 1362 阅读 · 0 评论 -
静态链接和动态链接简述
由于对静态链接和动态链接的概念已经动作有所不了解,因此特意写了这篇文章进行初步的梳理。主要参考《深入理解计算机系统》这本书。静态链接以一组可重定位的目标文件为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出。输入的可重定位目标文件由各种不同的代码和数据节组成。为了创建可执行文件,链接器必须完成两个主要任务:符号解析和重定位。链接器解析符号表.symtab,将每个符号引用和符号定义联系起来。静态库是一系列可重定位目标文件的集合,在Linux系统下,通过工具将其打包为一个文件。静态库出现的原因原创 2022-08-07 23:24:15 · 788 阅读 · 0 评论 -
《Vim实用技巧》笔记
一、vim命令每个模式下记下常用的命令即可。 命令 等效命令 命令效果 正常模式 >G 之后的每行右移 C c$ 删除光标到结尾的数据,并插入 s cl 删除当前字符,并插入。相当于xi S原创 2022-02-28 22:58:31 · 1257 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第十四章 任务和特权级保护
本章目标1、通过演示如何创建一个任务,并使之投入运行来学习任务的概念及组成要素,包括任务的全局空间和局部空间、TSS、LDT、特权级等。2、必须了解特权级不是指任务的特权级,而是组成任务的各个部分的特权级。比如:任务的全局部分一般是0、1和2特权级别的,任务的私有部分一般是3特权级别的。3、必须清楚CPL、DPL和RPL的含义,以及不同特权级别之间的控制转移规则。4、熟悉调用门的用法。5、掌握一些在Bochs下调试程序的新手段。6、学习一些新的x86处理器命令,包括lldt、ltr、pushf/原创 2022-02-28 22:28:48 · 859 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第十三章 程序的动态加载和执行
本章目标1、了解保护模式是为操作系统提供的技术,并没有给普通应用程序的编程带来负担。2、学习操作系统在保护模式下加载和重定位应用程序的一般原理,学习简单的内存动态分配,了解应用程序接口API的简单原理,学习字符串的比较算法。3、学习若干x86处理器的新指令,包括bswap,cpuid,cmovcc,sgdt,movzx,movsx,cmpsb,cmpsw,cmpsd和xlat等。13.1 代码清单13.2 内核的结构,功能和加载13.2.1 内核的结构内核代码分为4个部分,分别是初始化代码,内原创 2022-02-27 11:00:40 · 265 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第十二章 存储器的保护
本章目标1、通过实例来认识处理器是如何进行存储器的保护的。2、了解别名段的意义和作用。3、以一个字符串排序过程为例子,演示保护模式下的内存数据访问,体验一下它们与在实模式下访问数据段的不同。同时,在这个过程中学习汇编语言实现冒泡排序算法,以及一条新的x86指令xchg。本章的内容就是说明,保护模式如何保护数据的,数据读取、代码执行时是否超出了界限(代码段的保护,栈段的保护,数据段的保护)。...原创 2022-02-27 10:57:08 · 186 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第十一章 进入保护模式
本章目标:1、了解x86处理器的保护模式需要先定义全局描述符表GDT,认识段描述符的各个组成部分以及它们的含义和作用。2、认识32位处理器的全局描述符表寄存器GDTR、段寄存器(由段选择器和描述符高速缓存器组成)、控制器CR0和段选择子。3、了解进入32位保护模式的方法和步骤。4、学习保护模式下的一些程序调试技术,如查看全局描述符表GDT、段寄存器和控制寄存器等。5、学习lgdt指令11.1 代码清单11.2 全局描述符段描述符:保存段的相关信息,包括段基地址以及段界限,8个字节。全局描原创 2022-02-27 10:55:34 · 914 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第十章 32位x86处理器编程架构
Intel32位处理器架构,简称IA-32(Intel Architect,32-bi时Intel32位处理器架构,简称IA-32(Intel Architect,32-bi)。所谓处理器架构,或者处理器编程架构,是指一整套的硬件架构,以及与之相适应的工作状态。其中的灵魂部分就是一种设计理念,决定了处理器的应用环境和工作模式,也决定了软件开发人员如何在这种模式下解决实际问题。32位处理器除了扩展数据线和地址线,还增加了高速缓存,流水线,浮点数处理,多处理器(核)管理,多媒体扩展,乱序执行,分支预测,虚原创 2022-02-27 10:49:05 · 221 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】8-1和8-2代码的一些稍微的解释
1、8-1代码中,需要确定代码在硬盘的哪个位置,以及在内存的哪个地方加载在内存的哪个地方加载:phy_base dd 0x10000确定代码在硬盘的哪个位置:其实逻辑扇区在寄存器SI中,而SI是由程序直接写的,写成100。然后将逻辑扇区中的代码存放到0x0000开始的内存地址...原创 2022-02-27 10:46:29 · 147 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第八章 硬盘和显卡的访问与控制
本章目标:模拟操作系统加载应用程序的过程,演示段的重定位方法,彻底理解8086处理器的分段内存管理机制学习x86处理器过程调用的程序执行机制了解x86处理器访问外围硬件设备的方法总结JMP和CALL指令的全部格式认识更多的x86处理器指令,如in,out,shl,shr,rol,ror,jmp,call,ret等8.1本章代码清单8-1,主引导扇区程序加载器8-2,被加载的应用程序8.2 用户程序的结构8.2.1 分段、段的汇编地址和段内汇编地址1.SECTION、SEGMENT段原创 2022-02-27 10:45:09 · 1008 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第七章 比高斯更快的计算
本章目标:学习栈,了解处理器为了访问栈提供了怎样的支持总结INTEL8086处理器的寻址方式学习新的指令,or、and、push和pop学习bochs调试程序时查看栈的方法7.2 代码清单asm-7-1.pdf7.3 显示字符串解读10-28行代码,即显示message字符串的功能7.4 1到100的累计和解读31到37行的代码,即通过CX和jns指令来循环执行,获取累计和7.5 累加和各个数位的分解和显示7.5.1 栈和栈段的初始化栈也是一个内存段,叫栈段(Stack Se原创 2022-02-27 10:40:02 · 172 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第六章 相同的功能,不同的代码
采用不同的方法来实现和上一章相同的采用不同的方法来实现和实现和上一章相章相同的同功能用一种不同的分段方法,从不同角度理解处理器的分段内存访问机制学习循环和条件转移新指令,movsb、movsw、inc、dec、cld、std、div、neg、cbw、cwd、sub、idiv、jcxz、cmp等INTEL8086标志寄存器FLAGS的各个标志位计算机中的负数Bochs调试的更多技巧学习6.2 跳过非指令的数据区处理指令与非处理指令的数据之间夹杂,利用“jmp”来跳过数据区6.3 在数据声原创 2022-02-27 10:36:46 · 286 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第五章 编写主引导扇区代码
5.1 欢迎来到主引导扇区主引导扇区位置(MBR):0面0道1扇区主引导扇区有512字节,一个有效的主引导扇区的最后两字节为0x55和0xAAROM-BIOS程序将它加载到逻辑地址0x0000:0x7c00处,也就是物理地址0x7c00,然后判断它是否有效5.3 注释注释必须以英文“;”开始5.4 在屏幕上显示文字5.4.1 显卡和显存显卡为显示器提供内容,并控制显示器的显示模式和状态显存存储着每个像素的特性,现在流行24个bit对应一个像素屏幕上的每个字符对应着显存中的两个连原创 2022-02-27 10:31:41 · 368 阅读 · 0 评论 -
【x86汇编语言:从实模式到保护模式笔记】第一章 十六进制计数法
第一章 十六进制计数法第二章 处理器内存和指令2.1 寄存器和算术逻辑部件总线:一些用于输入和输出数据的引脚和线路寄存器:对于输入的电信号需要将其锁住,因此引入了寄存器的概念算术逻辑部件:ALU模块2.2 内存储器内存储器,即内存,存放数据的作用。内存中的每个字节对应着一个地址。2.4 指令和指令集指令事实上也是一堆的数字,但是这堆数字是由芯片规定好的低端字节序:高字节位于高地址,低字节位于低地址立即数:这个数已经在指令中给出,不需要再次访问内存。相反,如果指令中给出的是地址,真原创 2022-02-27 10:23:53 · 198 阅读 · 0 评论 -
linux下阅读源代码的工具
最近刚刚安装了Ubuntu,打开源码之后,突然发现阅读代码有些不习惯,故上网搜一下linux的源码阅读工具,做一个记录。一下内容来自https://www.cnblogs.com/lidabo/p/4957908.html。下面的文章并没有看完,我这边还是打算用ctag + vim来看代码==============================================inux源代码分析和阅读工具比较Windows下的源码阅读工具Souce Insight 凭 借着其易用性和多种编程语言的转载 2020-11-05 23:29:30 · 2869 阅读 · 0 评论