| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3672 人关注过本帖
标题:调用WriteConsole前是否要执行cld
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏
 问题点数:0 回复次数:3 
调用WriteConsole前是否要执行cld
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  https://www.bccn.net
*/ 作者: zklhp   E-mail:zklhp@  QQ:493165744
*/ 时间: 2008-10-12  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

那天在一个win32汇编的群里下到一本win32汇编快速入门的电子书(英文的 已作为附件上传)

其中有个控制台输出的程序有这样一段

程序代码:

; ---------------------------------------------------------------------------procWriteString 
proc 
; 
; Writes a null-terminated string pointed to by EDX to standard 
; output using windows calls. 
; ---------------------------------------------------------------------------


pushad 


INVOKE procStrLength,edx ; return length of string in EAX 
cld ; clear the direction flag 
; must do this before WriteConsole 
INVOKE WriteConsole, 
consoleOutHandle, ; console output handle 
edx, ; points to string 
eax, ; string length 
offset bytesWritten, ; returns number of bytes written 
0 
popad 
ret 

; ---------------------------------------------------------------------------



好像调用WriteConsole必须清方向位 于是用MasmPlus写个程序试试

程序代码:

;MASMPlus 代码模板 - 普通的 Windows 程序代码

.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
include masm32.inc

includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
includelib masm32.lib
include macro.asm

.DATA
    szBuf db 'bbs.bccn.net',0
.DATA?
    hStdOut    dd ?
.CODE
START:

    invoke GetStdHandle,STD_OUTPUT_HANDLE
    mov hStdOut,eax
    invoke lstrlen,offset szBuf
    push eax ;小把戏
    mov ecx,esp 
    ;int 3h
    ;std
    invoke WriteConsole,hStdOut,offset szBuf,eax,ecx,0
    pop eax
    invoke StdIn,offset szBuf,2
    invoke ExitProcess,0

END START



图片附件: 游客没有浏览图片的权限,请 登录注册


结果很明确了 不过方向位一般不会被置 所以大多数情况下不会出错

那为什么呢? 请出OD~~~~ 这里偶直接在前面加 int 3h 让它断下来~~(反正是自己写的)

图片附件: 游客没有浏览图片的权限,请 登录注册


7C81CE9E   F3:A5            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]

这肯定不对了

写到这里大家都明白了吧(要是不明白只能说明偶的表达能力不行……)

对汇编这种比较低级的语言来说 调用api也是很有讲究的

希望各位以后写程序时注意这些容易被忽视的地方

本人水平有限 有不当之处还望各位高手指出

附件里是和本文相关的一些东西 大家自己看吧

附件

新建文件夹.rar (469.42 KB)


[[it] 本帖最后由 zklhp 于 2008-10-12 16:58 编辑 [/it]]
搜索更多相关主题的帖子: WriteConsole cld 
2008-10-12 15:25
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
自己顶一下吧 希望大家注意

还有 偶自己审核自己的 是不是不太好?
2008-10-12 15:31
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
嗯,粗略一看,偶还是懂的~~不错,顶一个.
偶也要多积累点儿经验~~
2008-10-12 15:34
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-10-12 15:34 的发言:[/bo]

嗯,粗略一看,偶还是懂的~~不错,顶一个.
偶也要多积累点儿经验~~


自己审核的………… 不犯规吧
2008-10-12 15:35
快速回复:调用WriteConsole前是否要执行cld
数据加载中...
 
   



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

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