| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 455 人关注过本帖
标题:求教:使用ReadFile无法读出数据,请看下有什么问题?
收藏  订阅  推荐  打印 
hwbnet
Rank: 3Rank: 3
等级:中级会员
威望:2
帖子:356
积分:3848
注册:2004-12-9
求教:使用ReadFile无法读出数据,请看下有什么问题?

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
搜索更多相关主题的帖子: ReadFile  数据  
2007-10-1 20:15
zklhp
Rank: 12Rank: 12Rank: 12
来自:china
等级:版主
威望:8
帖子:728
积分:8549
注册:2007-7-10

;#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编辑过]


程序会写,就是写起来费劲,
代码会看,就是看起来要参考,
道理懂得,就是懂得一知半解,半瓶子醋,
能说会道,就是原理懂得,懂得不深,
啥都知道,就是不知道到底自己知道什么。
2007-10-2 11:03
zklhp
Rank: 12Rank: 12Rank: 12
来自:china
等级:版主
威望:8
帖子:728
积分:8549
注册:2007-7-10

是这样吗?

程序会写,就是写起来费劲,
代码会看,就是看起来要参考,
道理懂得,就是懂得一知半解,半瓶子醋,
能说会道,就是原理懂得,懂得不深,
啥都知道,就是不知道到底自己知道什么。
2007-10-2 11:03
hwbnet
Rank: 3Rank: 3
等级:中级会员
威望:2
帖子:356
积分:3848
注册:2004-12-9

push eax
invoke ReadFile,wenjian,offset ff,10000,esp,0
pop eax
改成这样就对了,请问这样改是什么意思?

胡文斌 本人论坛:http://hwbnet.bbs.pepo.cn/
2007-10-2 11:43
zklhp
Rank: 12Rank: 12Rank: 12
来自:china
等级:版主
威望:8
帖子:728
积分:8549
注册:2007-7-10

以下是引用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的地址


程序会写,就是写起来费劲,
代码会看,就是看起来要参考,
道理懂得,就是懂得一知半解,半瓶子醋,
能说会道,就是原理懂得,懂得不深,
啥都知道,就是不知道到底自己知道什么。
2007-10-2 15:24
hwbnet
Rank: 3Rank: 3
等级:中级会员
威望:2
帖子:356
积分:3848
注册:2004-12-9

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


胡文斌 本人论坛:http://hwbnet.bbs.pepo.cn/
2007-10-2 16:03
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.051599 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved