读书人

关于WIN32汇编文件传输的有关问题

发布时间: 2012-05-01 12:48:58 作者: rapoo

关于WIN32汇编文件传输的问题 请教高手
invokerecv,_hSocket,addr @szFileLength,sizeof @szFileLength,0 //接受文件长度
.break.if eax == SOCKET_ERROR
.break.if ! eax
invokerecv,_hSocket,addr @szFileName,sizeof @szFileName,0//接受文件名
.break.if eax == SOCKET_ERROR
.break.if ! eax
invoke CreateFile,addr@szFileName,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
.ifeax == INVALID_HANDLE_VALUE//打开文件
ret
.endif
mov@hFile,eax
xorebx,ebx
.repeat//循环每次接受500字节数据,ReadSize为500,存放在 @DataBuff
invokerecv,_hSocket,addr @DataBuff,ReadSize,0
.ifeax == SOCKET_ERROR
.continue
.endif
add@WriteCount,eax//把返回的数据长度累加在 @WriteCount
movebx,@WriteCount//用BX 和文件长度比较是否接收完
invokeWriteFile,@hFile,addr @DataBuff,ReadSize,addr @WriteOnce,0//写入文件
.until ebx < @szFileLength

上面的代码问题是 文件尾部总会少点数据,在C++里面用类似的方法是正常的
请教个位


[解决办法]
@WriteCount 之前清 0 了没?WriteFile() 不应该用 ReadSize 而应该是上面的 eax 吧。
如果 @WriteCount 清 0 了的话,一般应该是文件尾部会多出来点儿,而不是少了。
[解决办法]
local 默认是 0 ?谁说的??这个必须清 0 。如果是定义在 .data 里的,不清 0 还勉强。

读书人网 >汇编语言

热点推荐