美文网首页
X86 Assemble指令--offset

X86 Assemble指令--offset

作者: None_Ling | 来源:发表于2018-09-05 11:09 被阅读82次

offset的作用

offset是一条伪指令,在编译的过程中,编译器会将该伪指令进行计算,并且替换成标号/变量的地址偏移量

基础知识

在数据段中,通过使用dbdwdd来定义该变量存放数据的大小。
db: define byte,定义一个字节
dw: define word,定义一个字,两个字节
dd: define double word,定义两个字,四个字节

而字符串最好使用db来定义,因为字符都是使用ASCII来定义的,而每一个字符都只占一个字节。而使用dw、dd来定义的话,由于X86是Little Endian排序,所以在内存中的字符的排序会错乱

dup伪指令定义了在编译时,会将dup定义的数据对连续长度的内存空间进行填充。

举例

data segment
//  定义长度为4*16=64个字节(长度为40H)的数组,并且以1进行填充
data1 db 40h dup(1)
// 定义从data2单元开始,连续存放5,6,8,100,共占4个字节地址,每一个单元占一个字节
data2 db 5,6,8,100
// 定义从data3单元开始,连续存放7,287,共占4个字节,每个单元占一个字(两个字节)
data3 dw 7,287
// 定义一个字符串,字符串中每一个字符都占一个字节
data_string db 'hello world'
data ends

以上定义了数据段,并且在数据段中有一个变量data1长度为64个字节的数组。

mov eax,offset data1;

上述汇编指令,在编译的时候会对offset伪指令进行解释。
假如data1的偏移量为0x400H,那么在编译器编译过后的二进制文件中,该指令就会变成:

mov eax,0x400H;

同样,offset伪指令对于代码段中的标号也是有同样的效果。

assume cs:codesg  
codesg segment  
start:mov ax,offset start  ;相当于mov ax,0  
    s:mov ax,offset s      ;相当于mov ax,3  
codesg ends  
end start 

在编译过后,上述指令就会变成

assume cs:codesg  
codesg segment  
start:mov ax,0; 
    s:mov ax,3;
codesg ends  
end start 

因为代码段的偏移量是从0开始的,并且mov ax,0指令占3个字节,所以标号s的偏移量就是3

注意

后续还需要测试一下当DS段的基址改变时,offset所编译出来的值是否有区别。

相关文章

  • X86 Assemble指令--offset

    offset的作用 offset是一条伪指令,在编译的过程中,编译器会将该伪指令进行计算,并且替换成标号/变量的地...

  • X86 Assemble指令--LEA

    LEA指令描述 LEA指令 LEA指令用来计算第二个操作数(源操作数)的有效地址,并且将该地址保存到第一个操作数(...

  • X86 Assemble指令--ptr

    Assemble指令中标识大小 在Assemble中通常会看到WORD ptr或者DWORD ptr或者BYTE ...

  • X86 Assemble指令--MOVS指令簇

    介绍 MOVS系列的指令簇主要用来复制字符串(move string)。 作用 主要将DS:SI地址的数据复制到E...

  • X86 Assemble指令--REP指令前缀簇

    介绍 REP指令簇主要用来重复执行指令。REP前缀后加指令来协同完成。如: 描述 重复N次字符串指令,N的值存储在...

  • 汇编笔记4(跳转)

    第9章(转移指令): 8086转移指令: 无条件转移指令,条件转移指令,循环指令,过程,中断 offset(伪指令...

  • 汇编基础知识六

    0x01 简介 这里开始熟悉汇编的指令格式 下图为X86版本的指令格式,X64的指令格式和X86差不多后面有需要的...

  • 汇编指令

    X86和X87汇编指令大全(有注释) ---------- 一、数据传输指令 ------------------...

  • 寻址相关

    相关链接:X86-64 架构指令解析 汇编中的指令详解 Intel AMD x64软件约定 x86/x64 指令编码内幕

  • 华为云服务器CPU架构x86和鲲鹏区别对比及选择

    华为云服务器x86计算和鲲鹏计算有什么区别?x86和鲲鹏是指CPU架构的两个系列,x86采用复杂指令集(CISC)...

网友评论

      本文标题:X86 Assemble指令--offset

      本文链接:https://www.haomeiwen.com/subject/flnowftx.html