有人问我,如何用DEBUG生成自己想要的图片,在这里我就分享一下。
其实生成任意静态文件都可以用这种方法,但是不能超过64K大小,但可执行文件可能会有问题。
先描叙一下文件是什么:
文件就是一堆2进制数据,然而批处理一般是无法读取二进制的,用DEBUG可以(其实显示的是16进制)查看内存映像,这些内存数据其实就是文件本身二进制的内容。
那么我们要生成自己想要的文件:
第一步必须知道该文件的16进制内容,把这些内容存在一个文件里。
第二步是通过DEBUG,将保存的16进制内容写入内存,然后生成文件。
一。
我们来做如何得到文件的内存映像,以一张19K的图片为例。- @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
- set "file=1.jpg"
- ::第一步:得到文件的字节数,你可以用dir,或者FOR来获得。
- for %%i in (!file!) do set /a "size=%%~zi + 256"
- if !size! gtr 65536 (echo 文件太大!&goto :eof)
- ::第二步:换算成16进制!1.jpg大小为19730,换算成16进制4d12,因为文件都是从0100(10进制256)开始,所以最终地址应该是19730+256=4e12。
- set f=0123456789ABCDEF
- :loop
- set /a mod = %size% %% 16
- set /a size /=16
- set en=%mod% %en%
- if not %size% lss 1 (goto loop)
- set "size="
- for %%i in (%en%) do (set "size=!size!!f:~%%i,1!")
- ::第三步:取得图片0-4e12地址段的内存数据存到CS.TXT。
- echo exit|cmd /kprompt d100 !size! $_q$_|debug %file%>cs.txt
- ::第四步:cs.txt需要处理掉无用的部分,改成"e 内存地址 16个字节数据",含debug命令的bat。代码如下
- >newcs.bat echo more +4 newcs.bat^|debug ^>nul
- >>newcs.bat echo ren newfile.tmp new.jpg
- >>newcs.bat echo start new.jpg
- >>newcs.bat echo goto :eof
- for /f "skip=3 tokens=2-18 delims=:- " %%a in (cs.txt) do (
- set "str=e %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q"
- set str=!str:.=!
- echo !str!>>newcs.bat
- )
- ::设置内存起始-终止地址。
- echo rbx>>newcs.bat
- echo 100>>newcs.bat
- echo rcx>>newcs.bat
- echo !size!>>newcs.bat
- echo n newfile.tmp>>newcs.bat
- echo w>>newcs.bat
- echo q>>newcs.bat
- echo,>>newcs.bat
- ::第五步:生成图片!
- del cs.txt
- start /b newcs.bat
复制代码 修正了一些错误,生成的newcs.bat 直接运行,即可生成图片(文件)。 |