考慮以下過程,它使用值填充一個雙字數組,並帶入兩個參數:EBP + 08h
是數組的大小,而EBP + 0Ch
是給定數組的偏移量。 (即OFFSET myarray
):是否有可能在組件中取消引用內容?
MyProc PROC
PUSH EBP
MOV EBP, ESP
SUB ESP, 04h
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX, [EBP + 08h] ;move the size of the array into EBX
MOV [EBP - 04h], 00h ;EBP - 04h will be the counter (or the index.)
MOV ESI, [EBP + 0Ch] ;move the offset of the array into ESI
MOV EDI, 01h
INC EBX
@@:
MOV [ESI + 04h * [EBP - 04h]], EDI ;How can I actually move EDI into
;the dword found at address ESI + 4 * the value found at address EBP - 4?
INC [EBP - 04h] ;increment the counter and the value to be stored.
INC EDI
CMP [EBP - 04h], EBX
JNE @B
POP EBX
POP ESI
POP EDI
MOV ESP, EBP
POP EBP
RET
MyProc ENDP
哪裏嘗試移動EDI
爲[ESI + 04h * [EBP - 04h]]
是什麼,我試圖做的,因爲在地址EBP - 4
的DWORD是數組索引的例子。
有沒有什麼辦法可以將EDI
實際移動到地址ESI + 4 * the dword at address EBP - 4
的雙字上?還是我看着這個錯誤的方式?
「變量」是一個高級概念。你仍然可以考慮你的循環計數器一個變量,如果你把它保存在一個寄存器中,並且不需要任何堆棧空間來泄漏它。 –