masm x86 assembly *仅* return 解引用存储在给定地址的值
masm x86 assembly does a dereference *only* return the value being stored at a given address
我为我的程序分配了一个基本缓冲区:
.DATA?
buffer DWORD 01FFFh DUP(?)
.CODE
MOV ESI, OFFSET buffer
我想获取缓冲区中两个值的地址,并将它们压入堆栈以备将来参考:
LEA EAX, [ESI + 04h * 00h]
LEA EBX, [ESI + 04h * 0Ah]
PUSH EAX
PUSH EBX
然后我想调用一个以起始地址和结束地址为参数的过程,以 ESP 和 ESP + 04h 作为参数。
PUSH [ESP] ;ESP contains the end address
PUSH [ESP + 08h] ;ESP + 08h contains the start address
CALL myProc
但是我不确定它最终是否会推送在地址 ESP 处找到的值和在地址 ESP + 04h 处找到的地址处找到的值,或者它是否只会推送地址在 ESP 找到,地址在 ESP + 04h 找到,因为取消引用。
对于我的情况,我需要能够 're-push' 在 ESP 找到的地址,以及在 ESP + 04h 找到的地址到堆栈上。
总而言之,即使 'value' 是另一个地址,取消引用是否仅 return 存储在给定地址的值?
谢谢
LEA 加载 "effective address"。所以你在推送两个地址。
要从这些地址获取数据并推送它们,您可以这样做:
MOV EAX,[ESP]
MOV EDX,[ESP + 4]
MOV EAX,[EAX]
MOV EDX,[EDX]
PUSH EDX
PUSH EAX
CALL SomeProc
你所做的与你想做的不一样:
PUSH [ESP]
将简单地将值(地址)再次压入栈顶,换句话说,它只是重复地址。它不做双重间接寻址,即它不会获取地址的内容,这显然是你想要的。
我为我的程序分配了一个基本缓冲区:
.DATA?
buffer DWORD 01FFFh DUP(?)
.CODE
MOV ESI, OFFSET buffer
我想获取缓冲区中两个值的地址,并将它们压入堆栈以备将来参考:
LEA EAX, [ESI + 04h * 00h]
LEA EBX, [ESI + 04h * 0Ah]
PUSH EAX
PUSH EBX
然后我想调用一个以起始地址和结束地址为参数的过程,以 ESP 和 ESP + 04h 作为参数。
PUSH [ESP] ;ESP contains the end address
PUSH [ESP + 08h] ;ESP + 08h contains the start address
CALL myProc
但是我不确定它最终是否会推送在地址 ESP 处找到的值和在地址 ESP + 04h 处找到的地址处找到的值,或者它是否只会推送地址在 ESP 找到,地址在 ESP + 04h 找到,因为取消引用。
对于我的情况,我需要能够 're-push' 在 ESP 找到的地址,以及在 ESP + 04h 找到的地址到堆栈上。
总而言之,即使 'value' 是另一个地址,取消引用是否仅 return 存储在给定地址的值?
谢谢
LEA 加载 "effective address"。所以你在推送两个地址。
要从这些地址获取数据并推送它们,您可以这样做:
MOV EAX,[ESP]
MOV EDX,[ESP + 4]
MOV EAX,[EAX]
MOV EDX,[EDX]
PUSH EDX
PUSH EAX
CALL SomeProc
你所做的与你想做的不一样:
PUSH [ESP]
将简单地将值(地址)再次压入栈顶,换句话说,它只是重复地址。它不做双重间接寻址,即它不会获取地址的内容,这显然是你想要的。