日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS

發(fā)布時(shí)間:2023/12/1 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?

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)時(shí), 不能用于賦值操作;
3、addr 面對(duì)局部變量時(shí)會(huì)轉(zhuǎn)換為 lea 等指令, addr 面對(duì)全局變量時(shí)則直接調(diào)用 offset;
4、在 invoke 中應(yīng)盡量使用 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 可讓當(dāng)前變量和下一個(gè)變量同址
??? 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的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。