汇编中addr和offset

2023-05-16

汇编中addr和offset的异同点!!!

一、相同点
1、addr 和 offset 操作符都是获得操作数的偏移地址;
2、addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是全局变量则把其地址放到目标文件中。
二、不同点
1、addr    伪操作符,只能用在 invoke 伪指令语句中;
2、offset 伪操作符可以用在任何可能涉及偏移地址的指令(当然包括 invoke 伪指令)并想获取操作数偏移地址的场合中;
3、addr 不能处理向前引用(即 addr 引用的操作数必须在使用 addr 前就得定义或声明),而offset 则能(不管引用的操作数是
其前或其后定义或声明);
所谓向前引用是指:标号的定义是在invoke    语句之后,比如在如下的例子:  
invoke    MessageBox,NULL,    addr    MsgBoxText,addr    MsgBoxCaption,MB_OK    //引用MsgBoxText、MsgBoxCaption 在先
......    
MsgBoxCaption    db    "Iczelion    Tutorial    No.2",0    //定义或声明 MsgBoxCaption 在 addr 后
MsgBoxText    db    "Win32    Assembly    is    Great!",0    //定义或声明 MsgBoxText 在 addr 后
如果您是用    addr    而不是    offset    的话,那    MASM    就会报
4、addr 是运行阶段在堆栈中分配内存空间,offset 是编译阶段由编译器解释。因此,addr 可以处理局部变量而 offset 则不能。
5、addr 如果检查到待处理的变量是局部变量,就在执行 invoke 语句前产生如下指令序列:    
lea    eax,operand
push    eax  
因为 lea 指令能够在运行时决定标号的有效地址,所以有了上述指令序列,就可以保证    invoke    的正确执行了。
总结:为了避免出现错误,建议除在局部变量中引用 addr 操作符外,其它场合使用 offset。
说明:某些文章中对 addr 和 offset 所引用的对象仅用了“变量或标号”,我是用“操作数”来阐述的,本人的观点是:
变量或标号感觉上包含的概念过窄,比如结构、函数等等,因此,觉得使用操作数好像感觉准确些
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编中addr和offset 的相关文章

  • Centos 7虚拟机ifconfig ens或ip addr时,ens33不显示inet地址

    systemctl stop NetworkManager systemctl disable NetworkManager
  • pa_offset = offset & ~(sysconf(_SC_PAGE_SIZE) - 1) 详解

    发现很多文章都没有把pa offset 61 offset amp sysconf SC PAGE SIZE 1 详细计算过程写出来 xff0c 自己专门计算了一遍 xff0c 附在文末 本例为man mmap中的原样实例程序 xff0c
  • SQL查询语句中的 limit 与 offset 的区别

    SQL查询语句中的 limit 与 offset 的区别 xff1a limit y 分句表示 读取 y 条数据 limit x y 分句表示 跳过 x 条数据 xff0c 读取 y 条数据 limit y offset x 分句表示 跳过
  • Google 地图 API:标记图像定位

    我已经更改了用于marker在谷歌地图上 新图像比旧图像宽得多 我注意到标记与旧图像对齐lat and lng以便标记位于其水平中点上方lat and lng 这不是我想要的 我想要的是lat and lng与左侧的标记对齐 我想偏移mar
  • 通过纹理偏移滚动 2D/3D 背景

    我一直在尝试在 Unity 中使用四边形来显示纹理来制作无限滚动的 2D 背景 我的想法是根据玩家的位置改变四边形的偏移 由于某种原因 当我更改偏移量时 我的图像无法正确重复 并且一旦达到偏移量 2 图像就会完全消失 纹理上 3 个不同 x
  • Oracle 11G 中的限制/偏移

    我正在尝试更新 Oracle 中的表 但遇到了一些困难 我正在从 MySQL 移植代码 但 Oracle 不支持 MySQL 允许的一些命令 这是 MySQL 代码 update table1 t1 set c5 select Contra
  • MySql 偏移量查询不起作用

    我有 MySql Workbench 6 2CE 希望这有帮助 我正在尝试像这样的偏移查询 SELECT id FROM nameTable OFFSET 10 ROWS 但它给了我一个关于 10 的语法错误 在这个位置不是有效的输入 有谁
  • jQuery Offset 返回负值

    我有一个像下面这样的场景 在我的用户界面中 我将有一个文本框 如果我在文本框中输入了数字 我需要向下滚动到相应的页码 In Dom 我将有一些带有各自 id 的 div 如果用户输入页码为 5 我将检查 dom 中的第 5 个 div 偏移
  • 未定义的偏移量:1

    在我当前的 PHP 脚本中出现此错误 未定义的偏移量 1 我的代码在这里 query SELECT item id username item content FROM updates ORDER BY update time DESC L
  • 如何使用直骨架计算多边形的斜接偏移

    我有一个用 Python 实现的 Straight Skeleton 算法 想用它来偏移多边形的边缘 我看过几篇提出这种抵消方法的论文 遗憾的是它们都没有提供有关如何实现它的具体信息 他们之中 带孔简单二维多边形直骨架的 CGAL 实现 h
  • 在Kafka中如何根据生产时间获得准确的偏移量

    我需要每天每小时获取 Kafka 生成的消息 每隔一小时我就会启动一个作业来消费 1 小时前生成的消息 例如 如果当前时间是 20 12 我将在 19 00 00 到 19 59 59 之间消费该消息 这意味着我需要在时间 19 00 00
  • 根据 textContent 中的索引突出显示文本

    Bounty 正如 jsPerf 所展示的 测试时最新发布版本的 Firefox Chrome 和 Internet Explorer 中最快的解决方案将获得奖励or创建此类解决方案最有用的答案由我自行决定 哇哈哈 I ll be most
  • R:如何在数据帧内进行偏移和匹配?

    我想使用类似于Excel的OFFSET和MATCH函数的东西 这里是一个示例数据集 数据 Which Test Test1 Test2 Test3 RESULT Test1 TRUE 80 0 Test2 FALSE 25 0 Test1
  • 如何获取 MySQL 中特定行的偏移量?

    我正在尝试创建一个图像数据库 该数据库不保存一致的 ID 记录 例如 它可能是 1 2 6 7 12 但正如您所看到的 只有 5 行 在表中我有 fileid 和 filename 我创建了一个 PHP 脚本 当我给出文件 ID 时 它会显
  • 获取表中元素的 offsetTop

    我似乎无法弄清楚如何获取表中元素的 offsetTop 它适用于表格外部的元素 但表格内的所有元素都返回相同的结果 并且通常位于页面顶部 我在 Firefox 和 Chrome 中尝试过这个 如何获取表中元素的 offsetTop offs
  • $offset 不适用于分页 codeigniter

    我正在尝试在我的搜索结果页面中实现分页 我昨天问过这个问题但没有成功使用 codeigniter 分页在搜索页面上不受限制的记录 https stackoverflow com questions 16775206 records not
  • C++、Cheat Engine / OllyDBG 从多级指针查找基“静态”地址

    我又回来了 沮丧并拼命寻求帮助 D 我正在尝试为一个简单的程序创建一个作弊程序 它基本上是一个 dll 文件 当使用其基地址注入主程序时 它将更改主程序中的整数值 问题是 我无法使用作弊引擎找到它 主要是因为有多个带有负数的级别指针 偏移量
  • 检查 DST 是否生效

    In PHP date I 会告诉我夏令时是否有效 这是否告诉我 DST 是否专门针对我的服务器配置的时区有效 或者是否在有效期间 我在亚利桑那州 那里不遵守夏令时 因此 我需要我的服务器认识到纽约现在比我早 2 小时 但是当明年 3 月夏
  • C 代码获取相对于 UTC 的本地时间偏移(以分钟为单位)?

    我没有找到一种简单的方法来获取本地时间和 UTC 时间之间的时间偏移 以分钟为单位 起初我打算使用tzset 但它不提供夏令时 根据手册页 如果夏令时有效 它只是一个不为零的整数 虽然通常是一个小时 但在某些国家 地区可能是半小时 我宁愿避
  • SplFileObject + LimitIterator + 偏移量

    我有两行数据文件 两行仅用于我的示例 实际上 该文件可以包含数百万行 并且我使用 SplFileObject 和 LimitIterator 进行偏移 但这种组合在某些情况下会有奇怪的行为 offset 0 file new SplFile

随机推荐

  • C#实现缩放和剪裁图片的方法示例

    C 实现缩放和剪裁图片的方法 分享给大家供大家参考 xff0c 具体如下 xff1a 1 2 3 4 5 6 7 8 9 10 11
  • 虚拟内存解疑

    虚拟内存别称 虚拟存储器 xff08 Virtual Memory xff09 电脑 中所运行的 程序均需经由 内存执行 xff0c 若执行的程序占用内存很大或很多 xff0c 则会导致内存消耗殆尽 为解决该问题 xff0c Windows
  • windows内存结构概述

    13 1 Windows的虚拟地址空间安排 13 1 1虚拟地址空间的分区 xff08 即虚拟地址空间布局 xff09 进程的地址空间划分 分区 x86 32位 Windows 3GB用户模式下的x86 32位Windows X64 64位
  • 变量名和内存地址及符号表

    1 变量名是给编译器看的 xff0c 编译器根据变量是局部还是全局分配内存地址或栈空间 xff0c 所谓的变量名在内存中不存在 xff0c 操作时转换成地址数存放在寄存器中了 其实可以理解为是符号表起到了连接作用 2 符号表 xff08 此
  • C/C++编译和链接过程详解 概述 (重定向表,导出符号表,未解决符号表)

    详解link 有 些人写C C 43 43 以下假定为C 43 43 程序 xff0c 对unresolved external link或者duplicated external simbol的错误信息不知所措 xff08 因为这样的错误
  • 编译器构造概述(详细)

    一 编译器简介 前面谈到静态链接器构造的基本流程 xff0c 最后提到所构造的链接器若要能正常工作的前提是需要构造一个能生成符合链接器输入文件格式的编译器 xff0c 本文构造一个符合这种具体格式要求编译器 但是编译器的直接编译的结果一般是
  • nm命令中符号类型详解

    nm命令介绍的很多 xff0c 但大多不介绍其函数符号标志的含义 最近在调试动态库时常用到 xff0c 其中用的最多的用法 nm A grep aaa c 43 43 filt A 为了显示文件 xff0c c 43 43 filt转换为可
  • 电脑怎样执行编程语言的?

    链接 xff1a https www zhihu com question 29227521 answer 154819061 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 这个问题
  • 汇编中的标号概念

    地址标号和数据标号 地址标号 1 assume cs code 2 code segment 3 a db 1 2 3 4 5 6 7 8 4 b dw 0 5 start mov si offset a 6 mov bx offset b
  • 汇编语言不带冒号标号的用法

    汇编语言中 xff0c 有一种编程方法 xff1a 直接定址表 这种方法和高级语言 xff0c C语言中的数组有类似的思想 xff0c 就是将参数编排在一起 xff0c 然后通过数组名的调用 xff0c 得到需要的数值 汇编语言中 xff0
  • 实战录 | 基于openflow协议的抓包分析

    实战录 导语 云端卫士 实战录 栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧 xff0c 希望对于关注我们的朋友有所裨益 本期分享人为云端卫士安全SDN工程师宋飞虎 xff0c 将带来基于openflow协议的抓包分析 一 什么是
  • 汇编中的标号

    当程序中要跳转到另一位置时 xff0c 需要有一个标识来指示新的位置 xff0c 这就是标号 xff0c 通过在目标地址的前面放上一个标号 xff0c 可以在指令中使用标号来代替直接使用地址 使用变量是任何编程语言都要遇到的工作 变量是计算
  • win32常用的汇编指令和寄存器

    通用寄存器 EAX 累加 Accumulator 寄存器 AX AH AL 常用于乘 除法和函数返回值 EBX 基址 Base 寄存器 BX BH BL 常做内存数据的指针 或者说常以它为基址来访问内存 ECX 计数器 Counter 寄存
  • win32汇编寄存器汇总

    32位CPU所含有的寄存器有 xff1a 4个数据寄存器 EAX EBX ECX和EDX 2个变址和指针寄存器 ESI和EDI 2个指针寄存器 ESP和EBP 6个段寄存器 ES CS SS DS FS和GS 1个指令指针寄存器 EIP 1
  • 汇编指令ebp与esp的关系与作用

    可以看到 xff0c 初始情况下 xff0c ebp此时值为0012FEDC xff0c 也就是栈帧的地址 xff0c 而栈顶地址esp值为0012FDFC 可以看到两个值有一定的关系 而 帧指针 的地址较高 然后我们让它执行前两句 xff
  • win32 汇编基础概念整理

    一 关于寄存器 寄存器有EAX EBX ECX EDX EDI ESI ESP EBP等 xff0c 似乎IP也是寄存器 xff0c 但只有在CALL RET在中会默认使用它 xff0c 其它情况很少使用到 xff0c 暂时可以不用理会 E
  • 汇编中的寻址方式

    存储器 存储器 xff08 Memory xff09 是现代信息技术中用于保存信息的记忆设备 其概念很广 xff0c 有很多层次 xff0c 在数字系统中 xff0c 只要能保存二进制数据的都可以是存储器 xff1b 在集成电路中 xff0
  • x86的32位汇编快速入门

    本文描述基本的32位X86汇编语言的一个子集 xff0c 其中涉及汇编语言的最核心部分 xff0c 包括寄存器结构 xff0c 数据表示 xff0c 基本的操作指令 xff08 包括数据传送指令 逻辑计算指令 算数运算指令 xff09 xf
  • 80x86汇编指令详解

    80x86指令系统 xff0c 指令按功能可分为以下七个部分 1 数据传送指令 2 算术运算指令 3 逻辑运算指令 4 串操作指令 5 控制转移指令 6 处理器控制指令 7 保护方式指令 3 3 1数据传送指令 数据传送指令包括 xff1a
  • 汇编中addr和offset

    汇编中addr和offset的异同点 xff01 xff01 xff01 一 相同点 1 addr 和 offset 操作符都是获得操作数的偏移地址 xff1b 2 addr 和 offset 的处理都是先检查处理的是全局还是局部变量 xf