MASM32 忽略进程内堆栈中的第一个数据地址

问题描述

我创建了以下流程:

labOne PROC USES esi eax ebx ecx edi,pX1:DWORD,pY1:PTR DWORD,pY2:PTR DWORD,pY3:PTR DWORD,pY4:PTR DWORD

当我将 pX1 地址移动到 esi 寄存器时,它会移动 pY1 的地址。当我移动到寄存器 pY1 时,它会移动 pY2 的地址等等。

地址好像被转移了。

此外,pY4 返回一个随机地址。

这是 labOne 的原型:

labOne PROTO,:dword,:PTR dword,:PTR dword

调用

INVOKE labOne,ADDR X,ADDR Y1,ADDR Y2,ADDR Y3,ADDR Y4

.数据:

X dd 32127212h,43121153h,21344214h,0064216340h,23243245h,51542145h
Y1 dd 6 DUP(0FFFFFFFFh)
Y2 dd 6 DUP(0FFFFFFFFh)
Y3 dd 6 DUP(0FFFFFFFFh)
Y4 dd 6 DUP(0FFFFFFFFh)

mov esi,pX1 screen

addresses 请帮忙,也许我没有注意到什么?

解决方法

问题是我用过

.386
.model medium,stdcall 

代替

.686
.model flat,stdcall