- 博客(6)
- 收藏
- 关注
转载 两张图看懂GDT、GDTR、LDT、LDTR的关系
根据描述符描述符所描述的对象不同,描述符可分为三类:储存段描述符,系统段描述符,门描述符(控制描述符)。32位汇编中16位段寄存器(CS、DS、ES、SS、FS、GS)中不再存放段基址,而 是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D2位是描述符表引用指示位TI,TI=0指 示从全局描述表GDT中读取描述符,TI=1指示从局部描述符表LDT中读取描述符。这些信息总称段选择符(段选择子)。④ 用段选择符高13位的位置索引值从LDT段中得到段描述符。
2024-10-29 18:02:56 13
原创 ld: i386 architecture of input file `kernel.o‘ is incompatible with i386:x86-64 output
学习操作系统时,链接几个用nasm汇编器生成的elf文件时,出现如题所示的错误提示。操作如下:nasm -f elf kernel.asm -o kernel.onasm -f elf string.asm -o string.onasm -f elf kliba.asm -o kliba.ogcc -c start.c -o start.o -fno-builtin-memcpyld -s -Ttext 0x30400 -o kernel.bin kernel.o kliba.o string
2021-07-05 15:18:17 2576 7
转载 内核中的内存都不分页
原文链接:https://www.cnblogs.com/james1207/p/3278424.html《linux内核设计与实现》,2.4.3节中有这么一句话:“内核中的内存都不分页”。内存分页机制是为普通进程设计的,每一个普通进程的内存空间都被划分为特定大小的页,如此一来,在某一个特定的时刻,该进程按需可以调进另一个内存页,而把长时间没有使用的页换出。内核与其它普通进程一样,也是一个进程,但却与其它普通进程不同,它可以直接操作硬件,并且它也控制着分页机制以及内存页换入换出的替换算法。因此,对内核占
2020-10-21 11:55:20 590
转载 [转载] 利用pushfd/popfd检测虚拟机(cpu模拟器)
执行popfd前:EFLAGS = 00200202[ESP] = FFFFFAFF执行popfd后:EFLAGS = 00244AD7不等于[ESP]中的FFFFFAFF,什么原因导致的呢?POPFD不是简单把[ESP]赋值给EFLAGS某些虚拟机(CPU模拟器)简单的把[ESP]值pop给了ELF,导致popfd后-》再pushfd-》再pop出来的值是相同的,实际如上,应该是不同的,popfd只对某些位有影响。这应该算是某些CPU模拟器的BUG....
2020-09-25 10:26:17 291
原创 研究X86汇编中的栈段初始化问题时候得到的一些经验
学了一段时间汇编,发现李忠老师的《X86汇编语言:从实模式到保护模式》十分不错,读下来的过程中能有一些自己的理解。栈段是个一直困扰我的问题,主要原因就是栈段不同于代码段和数据段,栈段的扩展方式是向下扩展的(向低地址扩展),所以栈段的段界限是其下限,而上限是无限制的(其实是有的,就是可用的最大的内存地址)。看过一个论坛里边,对向上同向下扩展的段的偏移地址的描述十分到位:“当段最大为1M时,在自然的...
2020-02-28 10:53:11 2405
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人