::把64k内任意文件转换为debug 可以接受输入格式,以便将其嵌入到批处理程序中。
::用法:把要处理的文件拖到本批处理上即可
或者在cmd命令行运行本批处理时,把要处理的文件作为第一个参数,
如果本代码存为mfd.bat,则:
- @echo off
- set/a size=%~z1
- set/a si=size/512+1
- ::取文件大小
- pushd %~dp1
- echo;&echo;&echo 正在转换请稍候。。。。。。
- (echo ;可用于在DEBUG里恢复成二进制程序的16进制数据,n后面的文件名不能以.exe为扩展名。
- echo a
- call :hex %1
- echo n 文件名
- echo w
- echo q
- )>for_debug.txt
- start for_debug.txt
- del %~n0.fc /q
- goto :eof
-
- :hex
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,128) do (set spac=!spac! )
- (for /l %%k in (1,1,!si!) do set /p=!spac!%~n0.fc
- ::准备一个比当前文件大的全空格文件
-
- set n=-1
- for /f "skip=1 tokens=1-3 delims=: " %%a in ('fc %~n0.fc %~nx1 /b') do (
- if "%%a"=="FC" goto :fcok
- set/a _a=0x%%a,n+=1
- if !_a! neq !n! (
- set /a n+=1
- for /l %%z in (!n!,1,!_a!) do (set "fc=!fc! 20")
- set /a n=_a
- )
- set "fc=!fc! %%c"
- if "!fc:~60!" neq "" (echo;db!fc:~,60!&set fc=!fc:~60!)
- )
- ::利用fc 的二进制对比,取十六进制编码,并生成debug 可以接受的输入串
-
- :fcok
- echo;db!fc!
- call :o-h 调用子过程,把文件大小转为16进制。
-
- echo r cx
- echo !hh:~-4!
- if "!hh:~4!" neq "" (echo r bx&echo !hh:~,-4!)
- ::转为debug可以接受的格式,低位在cx寄存器,高位在bx寄存器。
-
- endlocal
- goto :eof
-
- :o-h
- set n=0
- for %%a in (0 1 2 3 4 5 6 7 8 9 a b c d e f) do (set h!n!=%%a&set/a n+=1)
- :ohlp
- set/a one=size%%16,size=size/16
- set hh=!h%one%!!hh!
- if !size! equ 0 goto :eof
- goto :ohlp
复制代码 下面是一个处理得到的例子:
;可用于在DEBUG里恢复成二进制程序的16进制数据,n后面的文件名不能以.exe为扩展名。
a
db B8 00 00 CD 16 88 E0 B4 4C CD 21
r cx
b
n 文件名
w
q
把上面的数据通过管道输入给debug 处理,即可还原为原二进制数据。
[ 本帖最后由 netbenton 于 2009-7-3 12:58 编辑 ] |