0x00 前言
想通过修改cmder来弄一个自己的脚本工具箱,所以就要先对cmder的源码进行一个简单的分析,正好之前的shell没有进行系统的学习,只能看一个大概,希望可以通过分析学到更多的内容
下文所有的演示均放在
https://github.com/HLHai/csdn_blog/tree/master/cmder_Analysis 仓库中
0x01 cmder分析
1.准备工作
https://github.com/cmderdev/cmder
2.开始分析
首要目标就是对Cmder.bat进行分析。
我会在bat文件中进行详细注释,然后将注释后的文件放在github上的。并且练习的shell的demo也会放在github上。
按照之前的行文方式,会对源码进行一条一条仔细分析,懂即可跳过。
@echo off
@echo off表示执行了这条命令后关闭所有命令(包括本身这条命令)的回显
echo off意思就是以下执行的命令不显示在界面上。
@的意思是当前的命令不进行显示
dir
pause
依次放在
https://github.com/HLHai/csdn_blog/tree/master/cmder_Analysis/test/1 下面
eg:首先演示没有@echo off的bat
演示有echo off的
演示有@echo off的
接着来看下一句:
SET CMDER_ROOT=%~dp0
这里的set 其实就可以理解为是一个变量赋值的过程呗。
然后就是%~dp0的意思就是说获取当前的一个路径。
这里写一个demo进行下测试
https://github.com/HLHai/csdn_blog/tree/master/cmder_Analysis/test/2
这里还有一个需要注意的地方就是 %%包裹起来的被识别为变量,联想一下PHP,很好理解。
接着来看下一句
@if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%
这一句的if很简单,肉眼看到的语法就是 if 判断语句 执行语句
然后%CMDER_ROOT:~-1%这一句的语法就是类似于python的切片操作
这里的@感觉必要性不是很强
这里用一个小例子来进行练习
https://github.com/HLHai/csdn_blog/tree/master/cmder_Analysis/test/3
接着往下看
if exist "%~1" (
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%~1"
) else (
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%CMDER_ROOT%\config\ConEmu.xml"
)
这里的%~1的意思就是通过bat获取的参数
以下举例:
https://github.com/HLHai/csdn_blog/blob/master/cmder_Analysis/test/4/1.bat
最后就是start,就是程序调起的意思,这里没有什么难度。
其实这个Cmder.bat的作用就是来调起整个程序
调起的目标就是vendor/conemu-maximus5/ConEmu.exe这个软件,实际上软件也是可以直接用来替换cmd的。并且这里通过cmder.ico进行了icon的设置的设置。
实际上之后就可以对和这个ConEmu以及xml的设置文件进行分析。