ReadFile()WinApi汇编程序

时间:2012-08-18 00:45:25

标签: winapi assembly masm

我在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

1 个答案:

答案 0 :(得分:0)

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

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

INVOKE GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, MemorySize+1

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

inc     MemorySize

在致电GlobalAlloc之前