0

我遇到了 ReadFile() 的一个奇怪问题。文本文件已正确打开,但它仅读取 4 个字节而不是 MemorySize 中声明的字节数。C 中的相同代码可以正确执行。有人知道怎么了?

问候

.DATA
FileName DB "test.txt",0
MemorySize  DWORD 10

.DATA?
hFile    HANDLE ?
pMemory  DWORD  ?
SizeR    DWORD  ?

.CODE
start:

INVOKE CreateFile, ADDR FileName,\ 
    GENERIC_READ, 0, NULL,\
    OPEN_EXISTING, 0, NULL
mov hFile, eax
INVOKE GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, MemorySize+1
mov pMemory, eax
INVOKE ReadFile, hFile, ADDR pMemory, MemorySize, ADDR SizeR, NULL
INVOKE MessageBox, 0, ADDR pMemory, 0, 0
INVOKE LocalFree, pMemory
INVOKE CloseHandle, hFile
ret
end start
4

1 回答 1

0
INVOKE ReadFile, hFile, ADDR pMemory, MemorySize, ADDR SizeR, NULL
INVOKE MessageBox, 0, ADDR pMemory, 0, 0

在这两行中,您传递了一个指向 pMemory 指针的指针。GlobalAlloc 返回一个指向内存的指针,而 ReadFile 需要一个指针而不是指向指针的指针。删除 ADDR,它应该可以工作。

INVOKE GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, MemorySize+1

这也是错误的。您不能像在高级语言中那样做 MemorySize + 1。在这种情况下,您需要执行以下操作:

inc     MemorySize

在您致电 GlobalAlloc 之前

于 2012-08-18T03:08:11.363 回答