注册 登录
编程论坛 汇编论坛

求教:使用ReadFile无法读出数据,请看下有什么问题?

hwbnet 发布于 2007-10-01 20:15, 1154 次点击
buffer db "F:\\3d\\6\\存档\\ren.hwb",0
wenjian HANDLE ?
ff dd 41088d dup (?)


hwb proc
invoke CreateFile,ADDR buffer,\
GENERIC_READ,\
FILE_SHARE_READ,\
0,\
OPEN_EXISTING,\
FILE_ATTRIBUTE_ARCHIVE,\
0
mov wenjian,eax
cmp eax,INVALID_HANDLE_VALUE
jz @F
lea eax,ff
invoke SetFilePointer,wenjian,0,0,FILE_BEGIN
invoke ReadFile,wenjian,ff,164352d,0,0
invoke CloseHandle,wenjian
@@:
ret
hwb endp
5 回复
#2
zklhp2007-10-02 11:03

;#Mode=CON

.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include libc.inc

includelib msvcrt.lib
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm

.data

buffer db "F:\\3d\\6\\存档\\ren.hwb",0
wenjian HANDLE ?
ff dd 41088d dup (0)

.CODE

hwb proc
local read:dword
invoke CreateFile,ADDR buffer,\
GENERIC_READ,\
FILE_SHARE_READ,\
0,\
OPEN_EXISTING,\
FILE_ATTRIBUTE_ARCHIVE,\
0
mov wenjian,eax
cmp eax,INVALID_HANDLE_VALUE
jz @F
lea eax,ff
invoke SetFilePointer,wenjian,0,0,FILE_BEGIN
invoke ReadFile,wenjian,offset ff,10000,read,0
invoke CloseHandle,wenjian
@@:
ret
hwb endp
START:
invoke hwb
invoke printf,CTXT("%s"),offset ff
;int 3h
invoke ExitProcess,0


end START

[此贴子已经被作者于2007-10-2 16:18:51编辑过]

#3
zklhp2007-10-02 11:03
是这样吗?
#4
hwbnet2007-10-02 11:43
push eax
invoke ReadFile,wenjian,offset ff,10000,esp,0
pop eax
改成这样就对了,请问这样改是什么意思?
#5
zklhp2007-10-02 15:24
以下是引用hwbnet在2007-10-2 11:43:34的发言:
push eax
invoke ReadFile,wenjian,offset ff,10000,esp,0
pop eax
改成这样就对了,请问这样改是什么意思?

不好理解就想想c里的指针

用调试器跟踪一下就明白了



buffer db 'aaaaaaa',0

那 buffer 就指的是‘a’ offset buffer 指的是buffer的地址

#6
hwbnet2007-10-02 16:03

发现原因了,错在第四个参数,改为变量地址就行了。书上是这么说的:“返回本次读入操作实际读入的字节数,在进行任何I/O或错误检查之前该参数都应先设置为0。”真是诱导人误解为参数设为0。

1