| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖
标题:找错,我跟踪了半天 也没搞出来
取消只看楼主 加入收藏
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:8 
找错,我跟踪了半天 也没搞出来
程序代码:
;--------------------------------------------------------------------------------
说明:把uinx文本转换为Windows文本
;--------------------------------------------------------------------------------

changefile proc hfile;传入要转换的文件句柄
    LOCAL hnewfile,readnum
    LOCAL buff[256]:byte
    LOCAL newbuff[256]:byte
;--------------------------------------------------------------------------------
建立新文件
;--------------------------------------------------------------------------------   
    invoke CreateFile,addr sznewfile,GENERIC_WRITE OR GENERIC_READ,FILE_SHARE_READ,
                      0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
    .if eax != INVALID_HANDLE_VALUE
        mov hnewfile,eax
    .else   
        invoke CloseHandle,hfile
        ret
    .endif
;--------------------------------------------------------------------------------

;--------------------------------------------------------------------------------   
    .while TRUE
        invoke RtlZeroMemory,addr newbuff,256
        invoke ReadFile,hfile,addr buff,256,addr readnum,0
    .break .if !readnum ||!eax;实际读入字节数=0或调用失败,则跳出循环   
        lea esi,buff
        lea edi,newbuff

        .while readnum           
            lodsb            
            .if al==0ah
                mov ax,0a0dh                   
                dec dword ptr readnum
                stosw

            .else                   
                dec dword ptr readnum
                stosb
            .endif           
        .endw

        invoke WriteFile,hnewfile,addr newbuff,sizeof newbuff,addr readnum,0   
    .endw
   
    invoke CloseHandle,hfile
    invoke CloseHandle,hnewfile   
    ret
changefile endp
仿照老罗第十章,第一个小程序写的。
实际输出结果的字节数,为256的倍数。。。


这片段的步骤是:
1.新建一个文件
2.每次读取源文件256个字节
3.筛选后,写入新文件
4.源文件读取完毕或失败,则关闭文件




[ 本帖最后由 okayyyy 于 2010-7-30 23:27 编辑 ]
搜索更多相关主题的帖子: 跟踪 
2010-07-30 20:49
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
回复 2楼 东海一鱼
我看看
还是不行,我把newbuff改成512b
他就输出512b的倍数

我怀疑是没有剔除0dh造成的。我再试试

改成这样也不行
程序代码:
xunhuan:
        .while readnum
            lodsb
               .if al==0ah
                    mov ax,0a0dh                   
                    stosw                   
                .elseif al==0dh
                    inc esi
                    dec readnum
                    jmp xunhuan
                .else                   
                    stosb
                .endif   
            dec readnum           
        .endw
我怀疑 writefile 有错
这个函数确实是有错误,你指定多少他就输出多少,
老罗的那段代码用edx保存每次筛选过后的字节数
invoke    WriteFile,_hFile,addr @szBuffer,edx,addr @dwBytesWrite,NULL
 我靠,浪费了我5个小时 我。。。               
         

[ 本帖最后由 okayyyy 于 2010-7-30 23:15 编辑 ]
2010-07-30 22:46
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
这TM谁写的api介绍

BOOL WriteFile(   
HANDLE hFile,                 // 文件句柄  
LPCVOID lpBuffer,             // 数据缓存区指针   
DWORD nNumberOfBytesToWrite,  // 你要写的字节数   
LPWORD lpNumberOfBytesWritten,// 用于保存实际写入字节数的存储区域的指针   LPOVERLAPPED lpOverlapped     // OVERLAPPED结构体指针   );
2010-07-30 23:19
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
回复 4楼 东海一鱼
不能 我IDE的是这样写的  invoke CreateFile,addr sznewfile,GENERIC_WRITE OR GENERIC_READ,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0



[ 本帖最后由 okayyyy 于 2010-7-30 23:24 编辑 ]
2010-07-30 23:23
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
回复 7楼 zklhp
仔细看看,确实是我错鸟

我开始以为 这个 函数会截断 你指定的内容
比方: newbuff里面只有 'abcd',0

那writefile,就只写到 ‘abcd',0


[ 本帖最后由 okayyyy 于 2010-7-30 23:32 编辑 ]
2010-07-30 23:29
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
谢谢  非常感谢各位大牛的帮助。。。

看来学完老罗的书也不差多久了
2010-07-30 23:41
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
回复 11楼 东海一鱼
这莫非就是 FPE 个人版
我现在还看不懂他的功能
2010-07-30 23:58
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
FPE就是游戏修改器
你现在开始造IDE了,我只能说佩服。就算汇编的IDE容易,可那编译和连接选项实在是让我头疼。

8.1号 我就开是我的个人FPE界面制作,毕竟简单嘛
我觉得radasm比用vc6+助手写起来方便,只怪c的特殊符号太多,影响我打字的速度
2010-07-31 15:49
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
虽然觉得他的提示功能比不上助手,不过总的来说,比以前用记事本写代码舒服多了
2010-07-31 16:23
快速回复:找错,我跟踪了半天 也没搞出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058946 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved