Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS
PTR: 指定要操作的數(shù)據(jù)尺寸
------------------------------------------------------------------------------------------------------------------------------------------
.386
.model flat, stdcall
include??? windows.inc
include??? kernel32.inc
include??? masm32.inc
include??? debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.data
??? val db 11h, 22h, 33h, 44h, 55h, 66h, 77h, 88h
.code
main proc
??? xor eax, eax??????????????????? ;清空 EAX, 同 mov eax, 0
??? mov eax, dword ptr val?? ;
??? PrintHex eax????????????????? ?;44332211
???
??? xor eax, eax??????????????????????;
??? mov eax, dword ptr val+1 ;
??? PrintHex eax???????????????????? ?;55443322
???
??? xor eax, eax???????????? ;
??? mov ax, word ptr val???? ;
??? PrintHex eax???????????? ;00002211
???
??? xor eax, eax???????????? ;
??? mov al, byte ptr val???? ;
??? PrintHex eax???????????? ;00000011
??? ret
main endp
end main
------------------------------------------------------------------------------------------------------------------------------------------
OFFSET 和 ADDR 的異同:
1、offset 不能獲取局部變量的地址;
2、addr 只能用于調(diào)用函數(shù)(invoke)時, 不能用于賦值操作;
3、addr 面對局部變量時會轉(zhuǎn)換為 lea 等指令, addr 面對全局變量時則直接調(diào)用 offset;
4、在 invoke 中應盡量使用 addr, 其他只用 offset.
------------------------------------------------------------------------------------------------------------------------------------------
.386
.modelflat, stdcall
include?? windows.inc
include?? kernel32.inc
include?? masm32.inc
include?? debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.data
??? TextAddr equ this byte? ;偽指令 this 可讓當前變量和下一個變量同址
??? szText db'Asm', 0
.code
main proc
??? PrintHex offset szText? ;00403000
??? PrintHex offset TextAddr ;00403000
???
??? PrintString szText????? ;Asm
??? mov [TextAddr], 'a'???? ;給 TextAddr 賦值
??? PrintString szText????? ;asm
??? ret
main endp
end main
--------------------------------------------------------------------------------------------------------------------
同址異名
總結(jié)
以上是生活随笔為你收集整理的Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 照胃镜要多少钱啊?
- 下一篇: 颐和园优惠门票什么意思