CMD 控制台 CLS 命令内幕

本文探讨了在C语言中如何实现控制台清屏,详细分析了system("cls")命令的工作原理,通过OllyDbg调试cmd.exe,找到了清屏功能对应的汇编代码,并手动推导出C代码实现。结果显示,自定义的clearScreen()函数比system("cls")在速度上有显著优势。
摘要由CSDN通过智能技术生成

引入

今天碰到有人在群里问我“C实现清屏是不是只能system(“cls”);或一直换行?”,一时不知道怎么回答,毕竟一般在控制台里清屏,就是用的 system(“cls”)。

system(“cls”) 是调用了 C 标准库函数 system,作用就是将命令传递给控制台去解析执行。那么我们回顾一下命令执行的过程大致如下:会有一个字符串的解析,会尝试搜索外部命令,会与内部命令一一对比,还要看看是否可能加了参数,最后才转入 cls 的执行函数,然后调 API 清屏。

这么一看,它的效率实在不敢恭维。对于一个在速度上要求极高的人,这是不可忍受的。想到 Demon 大神曾对 cmd 进行了一系列分析,写出了个[批处理内幕]系列文章,那么我为什么不分析分析 cls 的背后到底都做了什么呢?

水平有限,如果操作有误还请大家不吝指教。
##准备
调试工具 OllyDbg 吾爱破解专用版,被调试程序 cmd.exe,系统环境:Win7 Ultimate。

步骤

  1. 用 od 打开 cmd.exe,F9 运行,如图
    od打开cmd.exe
  2. od 点击暂停,单步步过直到状态变为“运行”,回到 cmd,输入 cls,回车,回到 od,发现状态已变为暂停
    暂停到 cls 处
  3. 一直 F8 步过,直到回到 cmd 模块内
    f8 回到 cmd 模块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值