汇编之FS段寄存器

FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移  说明
000  指向SEH链指针
004  线程堆栈顶部
008  线程堆栈底部
00C  SubSystemTib
010  FiberData
014  ArbitraryUserPointer
018  FS段寄存器在内存中的镜像地址
020  进程PID
024  线程ID
02C  指向线程局部存储指针
030  PEB结构地址(进程结构)
034  上个错误号

得到KERNEL32.DLL基址的方法
assume
fs:nothing          ;打开FS寄存器
mov
eax,fs:[30h]           ;得到PEB结构地址
mov eax,[eax +
0ch]       
;得到PEB_LDR_DATA结构地址
mov esi,[eax +
1ch]       
;InInitializationOrderModuleList
lodsd                     
;得到KERNEL32.DLL所在LDR_MODULE结构的InInitializationOrderModuleList地址

mov edx,[eax +
8h]        
;得到BaseAddress,既Kernel32.dll基址

汇编之FS段寄存器

时间: 2024-10-14 12:43:30

汇编之FS段寄存器的相关文章

栈Stack和段寄存器SS,SP(学习汇编)

1. 栈有2个基本操作:入栈.出栈 2. 栈顶的元素总是最后入栈,最先出栈:后进先出. 3. 8086CPU提供入栈和出栈的指令,最基本的两个是 PUSH(入栈) 和 POP(出栈) push ax 表示将AX寄存器的内容送入栈中, pop ax 表示从栈顶取出数据送入AX寄存器中.     8086CPU的入栈和出栈操作都是以字(word)为单位的. 4. 8086CPU中,段寄存器SS:存放栈顶段地址,段寄存器SP: 存放栈顶的偏移地址. 5. 任意时刻:SS:SP 指向栈顶元素. 6. 8

汇编——段寄存器

段寄存器 8086CPU有14个寄存器 AX,BX,CX,DX,si,di,sp,bp,ip,cs,ss,ds,es,psw 其中有8个通用寄存器 8086寄存器16位,可以存放两个字节 AX BX CX DX一般用来存放一般数据 为保证兼容性,这四个寄存器可以分为两个独立的8位寄存器使用 AX可以分为AH和AL H高L低 同样的对于ABCD-X 字在寄存器中的存储 一个字可以存在一个16位寄存器中 Word=2B 关于数制的讨论 二进制太冗长 几条汇编指令 Mov ax,18         

汇编-8086内部寄存器+对段寄存器使用的约定

<微型计算机原理与接口技术(第2版)>冯博琴 吴宁 主编-清华大学出版社——做笔记用 一.8088/8086的14个16位寄存器: //------------------------------------------------------------------------------------------------------------------------------- 1.通用寄存器——8个 (1)数据寄存器——4个 AX: 累加器,常用于存放算数逻辑运算中的操作数,另外所

Orange&#39;S初始化段寄存器

最近开始看<Orange'S:一个操作系统的实现>,但因为不了解汇编,看第一个启动扇区的代码时就有疑惑: 1. 为了把cs中的值复制到ds和es中,首先需要将cs中的值复制到ax中,为什么不能直接复制? 2. mov ax, cs; mov ds, ax; mov es, ax;这三句初始化段寄存器的语句的意义是什么? 1 org 07c00h 2 mov ax, cs 3 mov ds, ax 4 mov es, ax 5 call DispStr 6 jmp $ 7 DispStr: 8

跟我学汇编(三)寄存器和物理地址的形成

一.通用寄存器 对于一个汇编程序员来说,CPU中主要部件是寄存器.寄存器是CPU中程序员可以用指令读写的部件.程序员通过改变各种寄存器的内容来实现对CPU的控制. 不同的CPU,寄存器的个数.结构是不同的.8086CPU 有14个寄存器,每个寄存器有一个名称.这些寄存器是:AX.BX.CX.DX.SI.BP.IP.CS.SS.DS.ES.PSW.在今后的学习中我们用到这些寄存器时就对这些寄存器进行介绍. AX.BX.CX.DX四个寄存器可以存放一般性的数据,所以这四个寄存器称为通用寄存器.在80

CPU的段寄存器

http://www.cnblogs.com/tolimit/p/4775945.html?utm_source=tuicool&utm_medium=referral CPU的段寄存器 在CPU中,跟段有关的CPU寄存器一共有6个:cs,ss,ds,es,fs,gs,它们保存的是段选择符.而同时这六个寄存器每个都有一个对应的非编程寄存器,它们对应的非编程寄存器中保存的是段描述符.系统可以把同一个寄存器用于不同的目的,方法是先将其寄存器中的值保存到内存中,之后恢复.而在系统中最主要的是cs,ds

段寄存器和8种地址寻址方式

段寄存器是因为对内存的分段管理而设置的. 16位CPU有四个段寄存器,其程序可同时访问四个不同含义的段,引用方面有如下规定:1. 取命令:段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令.2. 取堆栈:段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元.另外,当偏移量用到了指针寄存器BP,则其缺省的段寄存器也是SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶.3. 取数据:段

汇编学习笔记03(寄存器内存访问)

1. 字在内存中存储时, 要有两个地址连续的内存单元来存放. 字的低位字节存放在低地址单元中, 高位字节存放在高地址单元中. 2. DS: 存放段地址的寄存器, 这个段是存放数据的. [address]: 偏移地址 mov指令在访问内存单元时, 只给出偏移地址, 段地址默认在DS段寄存器中 3. mov ax, 1000 mov ds, ax 8086CPU不支持将数据直接送入段寄存器, 所以只能通过通用寄存器来进行中转. 4. 字的传送 80806CPU是16位结构, 有16根数据线, 所以一

汇编学习笔记02(寄存器CPU工作原理)

1. 什么是寄存器呢? 就是可以用指令进行读写的部件. 程序员通过改变各种寄存器中的内容实现对CPU的控制. 如果是16位CPU的话, 就是相当于2个存储单元. 2. 字在寄存器中的存储? 8086CPU可以一次性处理两种尺寸的数据 Byte: 字节型数据, 一个字节由8个bit组成, 可以存在8位寄存器中. Word: 字型数据, 一个字型由16个bit组成, 也就是两个字节, 称为这个字的高位字节和低位字节. 3. 常用汇编指令的学习(需要注意的是汇编指令是不区分大小写的) mov ax,