
汇编
汇编汇编
jadeshu
这个作者很懒,什么都没留下…
展开
-
jmp far
jmp 0x20:0x0123分析步骤:1.段选择子拆分 0X20 = B100000 ===>TI = 0;RPL=0;INDEX = 42.查DGT表得到段描述符 TI = 0 ,所以查找GDT表 INDEX=4 ,可找到对应的段描述符 四种情况可以跳转:代码段、调用门、TSS任务段、任务门3.权限检查 如果是非一致性代码段,要CPL==DPL并且RPL <= DPL 如果是一致性代码段(即代码共享),要求CPL>=DPL...原创 2021-01-01 22:22:47 · 613 阅读 · 0 评论 -
特权级之间的转换
一、特权级 在IA32的分段机制下,特权级总共有4个特权级别,从高到低分别是0、1、2、3。数字越小表示的特权级越大。特权级如下图所示:较为核心的代码和数据,将被存放在特权级较高的层级中。处理器将用这样的机制来避免低特权级的任务在不被允许的情况下访问位于高特权级的段。二、一致代码段和 非一致代码段 系统要安全,必须保证内核与用户程序分离开,内核要安全,必须不能被用户来打扰。但是有的时候,用户程序也是需要访问内核中的部分数据,那怎么办?于是操作系统就将内核中的段分...转载 2020-09-08 00:14:26 · 1271 阅读 · 0 评论 -
CPL、DPL和RPL
(1)CPL CPL是当前执行的程序或任务的特权级。它被存储在CS和SS的第0位和第1位上。通常情况下,CPL代表代码所在的段的特权级。当程序转移到不同特权级的代码段时,处理器将改变CPL。只有0和3两个值,分别表示用户态和内核态。(2)DPL DPL表示段或门的特权级。它被存储在段描述符或者门描述符的DPL字段中,当当前代码段试图访问一个段或者门(这里大家先把门看成跟段一样),DPL将会和CPL以及段或者门选择子的RPL相比较,根据段或者门类型的不同,DPL将会区别对待。 GD..原创 2020-09-07 23:59:34 · 3893 阅读 · 0 评论 -
GNU X86-64 汇编
源码 test.c#include <stdio.h>int main(){ printf("hello world!"); return 0;}gcc -S test.c 生成test.s .file "test.c" .text .def __main; .scl 2; .type 32; .endef .section .rdat...原创 2019-12-18 20:30:25 · 665 阅读 · 0 评论 -
cli sti cld std
cli:关闭中断,IF=0sti:开启中断,IF=1iret:中断返回后,会自动设置IF位为1,重新开启中断cld:清方向标志位,DF=0 ;si di地址递增方向std:设置方向标志位,DF=1;si di地址递减方向...原创 2019-12-18 16:53:04 · 731 阅读 · 0 评论 -
in /out指令
C机给予每一个端口分配了一个地址(称为端口号),形成一个独立于内存空间的I/O地址空间。详情请入:传统PC机I/O位址空间范围CPU对外设的操作通过专门的端口读写指令来完成。读端口用IN指令,写端口用OUT指令。IN AL,21H;表示从21H端口读取一字节数据到ALIN AX,21H;表示从端口地址21H读取1字节数据到AL,从端口地址22H读取1字节到AHOUT 2...原创 2019-12-17 20:03:01 · 13081 阅读 · 0 评论 -
条件转移指令
原创 2019-04-05 21:49:50 · 2733 阅读 · 0 评论 -
nasm汇编讲解
一、什么是nasm汇编nasm使用在windows、linux等系统下的汇编。二、语法介绍2.1 nasm 是区分大小写例如:符号 foo 与 FOO 是两个不同的标识符。2.2 内存操作数表达式2.2.1 在 nasm 语法里,对 memory 操作数需要加 [ ] 括号下面的代码:foo equ 1bar dw 2 bit...转载 2019-04-09 19:25:44 · 20441 阅读 · 1 评论 -
系统指令
系统指令用于处理系统级功能,如加载系统寄存器、管理中断等。大多数系统指令只能由处于特权级0的操作系统软件执行,其余一些指令可以在任何特权级上执行,因此应用程序也能使用。下表中列出了我们将用到的一些系统指令。其中还指出了它们是否受到保护。 常用系统指令列表 指令...原创 2019-07-01 20:29:17 · 829 阅读 · 0 评论 -
内存管理分段和分页机制
---其中:(*)分段机制(物理地址/线性地址 = 段基址 + 偏移量) 保护模式下未开启分页(段基址+偏移量)直接对应物理地址空间; 保护模式下开启分页(段基址+偏移量)则是对应线性地址空间的地址。X86 CPU中逻辑地址到线性地址映射过程:(*)分页机制(物理地址=页表项内的地址+偏移量)一级页表 ...原创 2019-09-03 18:29:22 · 477 阅读 · 0 评论 -
实模式下的内存布局
作者:北极链接:https://www.zhihu.com/question/269649445/answer/351632444来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。显存基地址虽然是人为确定的,但真要追究原因的话,还是可以找到一些原因的。首先,16位时代8086的寻址范围是0000:0000~FFFF:000F,最早划给RAM...原创 2019-04-05 01:46:57 · 2856 阅读 · 0 评论 -
物理、线性、虚拟、逻辑、有效地址
1、物理地址:就是物理内存真正的地址,相当于内存中的每个存储单元的门牌号,具有唯一性。CPU最终都要以物理地址去访问内存,只有物理地址才是内存访问的终点站。 在实模式下,{段基址+段内偏移地址}经过段部件的处理,直接输出的就是物理地址,CPU可以直接用此地址访问内存。2、线性地址: 在保护模式下:{段基址+段内偏移地址} 称为线性地址,不过此时段基址已经不是真正的地址,...原创 2019-04-04 20:12:04 · 2143 阅读 · 2 评论 -
debug调试命令
原创 2019-03-08 19:57:44 · 375 阅读 · 0 评论 -
Intel 80386 微处理器的存储器管理
一、存储器的管理 存储器的管理是一种硬件机制,微处理器在总线地址上对物理存储器进行寻址。但是,为了给程序提供比物理存储器容量更大的空间,就引入了虚拟存储器的概念,它在外存(比如磁盘)的支持来下实现,通常所说的虚拟地址称为逻辑地址。对80386来说,既有段的管理又有页的管理。对段和页的管理属于操作系统的职责,80386从硬件上提供管理机制。 二、Intel 80386转载 2017-04-01 15:39:25 · 1332 阅读 · 0 评论 -
汇编输出文字
;-------------汇编------------;------------jadeshu----------mov ax,0xb800mov es,ax;下面输出hello字符mov byte[es:0x0000],'H'mov byte[es:0x0001],0x07 ;黑底白字; 0000 0111(KRGB IRGB) ;K闪烁位,为0时闪烁,为1时不闪烁;I亮原创 2017-03-16 23:40:33 · 3490 阅读 · 0 评论 -
CALL与retn
一.CALL例如:004013D9 CALL 00401C4C //ESP = 0060F9C8004013DE相当于sub esp,0x4; //ESP = 0060F9C4mov dword[esp],0x004013DE//把CALL下一个指令IP保存栈顶中jmp 0x00401C4C二RETN例如:00401C54原创 2017-04-20 23:08:41 · 1123 阅读 · 0 评论 -
mov指令
一、规定1.立即数不能作为目的操作数,如mov 110H,AX2.立即数不能直接传给段寄存器,如mov DS,110H2.两个操作数不能同时为段寄存器,如mov ES,DS3.两个操作数不能同时为存储单元,如mov [0x1245],[0x1312]5.代码段寄存器CS不能为目的操作数,但可为源操作数6.指令指针IP不能作为mov指令的操作数MOV指令的变通方法原创 2017-05-20 17:07:06 · 6795 阅读 · 0 评论 -
汇编看函数调用过程
分析下列源码:#include DWORD _stdcall Function(DWORD dwP1, PVOID p2){ DWORD v1; DWORD v2 = 3; v1 = dwP1 + v2; return v1;}int main(){ Function(100,nullptr); return 0;}转汇编 vs2012#include原创 2016-12-14 21:23:14 · 1080 阅读 · 0 评论 -
一些常见段寄存器问题
X861.当写一个段寄存器时(如MOV ES,AX),只给定了16位,段寄存器有96位,那么另外80位从何处而来?这16位数能随便写吗?段寄存器学习答:当写一个段寄存器时,CPU会根据AX的值来决定查取GDT表/LDT表,因此AX不能随便写。 ...原创 2017-12-13 22:18:32 · 749 阅读 · 0 评论 -
GDTR与LDTR
一、访问GDT当TI=0时表示段描述符在GDT中,如上图所示:段描述符(64位)①先从GDTR寄存器(48位,其中前32位base+16位长度)中获得GDT基址。②然后再GDT中以段选择器(ES,DS等等)高13位位置索引值得到段描述符。③段描述符符包含段的基址、限长、优先级等各种属性,这就得到了段的起始地址(基址),再以基址原创 2017-06-01 23:35:56 · 1868 阅读 · 2 评论 -
段寄存器
一、段寄存器有哪些? 通常我们用汇编读写某一个地址时,如下 mov dword ptr ds:[0x123846],eax 这时我们把eax的值往地址去写,写的地址是:ds.base+0x123846 段寄存器有ES、CS、SS、DS、FS、GS、LDTR、TR共8个。二、段寄存器的结构 图形表示: 结构体原创 2017-05-31 00:08:59 · 2830 阅读 · 0 评论 -
汇编基础知识
**************************************************************************************************寄存器***********************************************************************************************原创 2018-02-03 15:47:30 · 309 阅读 · 0 评论 -
汇编寻址方式
立即数寻址方式:MOV AX,0102H 源操作数是数寄存器寻址方式 : MOV BX,AX 源操作数是寄存器。这些寄存器有:16位的AX BX CX DX SI DI SP BP 8位的AH AL BH BL CH CL DH DL直接寻址方式 :MOV AX,[2000H] 源操作数是地址,与立即数寻址的区别就是,地址一般就是有【】寄存器间接寻址方式...原创 2019-03-08 19:56:28 · 600 阅读 · 0 评论 -
80x86的内存寻址机制
80x86的内存寻址机制80386处理器的工作模式:80386处理器有三种工作模式:实模式、保护模式 和 虚拟86模式。模式的切换:实模式和保护模式之间可以相互转换,保护模式和虚拟86模式之间可以相互转换,而实模式和虚拟86模式之间不可以相互转换。DOS系统运行于实模式下,Windows系统运行与保护模式下。 实模式:80386处转载 2017-04-01 15:31:25 · 1080 阅读 · 0 评论