汇编-OFFSET地址偏移量
OFFSET操作符返回数据标号的偏移量。这个偏移量表示的是按字节计算该数据标号距离数据段起始地址的距离。
.386 .model flat,stdcall option casemap:none .data bVal BYTE ? wVal WORD ? dVal DWORD ? dVal2 DWORD ? ExitProcess PROTO,dwExitCode:DWORD .code main PROC mov eax, OFFSET bVal ;EAX = 01244000h mov ebx, OFFSET wVal ;EBX = 01244001 mov ecx, OFFSET dVal ;ECX = 01244003 mov edx, OFFSET dVal2 ;EDX = 01244007 INVOKE ExitProcess,0 main ENDP END main
.386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data myArray WORD 1,2,3,4,5 .code main PROC mov eax,OFFSET myArray ;EAX = 00834000h mov ebx,OFFSET myArray+4 ;EBX = 00834004h INVOKE ExitProcess,0 main ENDP END main
64位汇编
OFFSET操作符产生64位地址, 必须用64位寄存器或变量来保存
ExitProcess PROTO ;函数的声明不需要参数 .data var DWORD 2,4,6,8,10 .code main PROC mov rsi, OFFSET var ;RSI = 00007FF788AA4000h mov ecx,0 ;结束程序 call ExitProcess ;64位版本的MASM不支持INVOKE伪指令。 main ENDP END ;END伪指令没有指定程序入口点, 而32位程序则指定了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-11-16 opencv-log绝对值的自然对数
2020-11-16 Arduino--光感应模块--模拟输入
2020-11-16 Arduino---按钮
2020-11-16 Arduino--PWM引脚
2019-11-16 python--UUID唯一标识符