Board logo

标题: [文件操作] 【求助】怎么让批处理携带一个exe程序 [打印本页]

作者: hackerlong    时间: 2009-7-2 13:47     标题: 【求助】怎么让批处理携带一个exe程序

我写了个批处理需要用到第三方软件。怎么让批处理里携带一那个第三方软件。让批处理自己生成那个第三方工具。

[ 本帖最后由 hackerlong 于 2009-7-3 02:23 编辑 ]
作者: keen    时间: 2009-7-2 17:28     标题: 回复 1楼 的帖子

不明白怎么个携带法,你可以考虑将批处理和第三方软件用压缩软件一起压缩。
作者: zljzsmzzx    时间: 2009-7-2 17:36

楼主还真能想啊。你是不是想让批处理自己生成你那个第三方工具?我倒是看过别人用DEBUG临时生成些简单的程序供批处理使用。不过我想应该不是所有的第三方命令行工具都能这样简单的就可以生成的吧。二楼的方法应该是最好的办法,或许可以说是唯一的办法吧(个人看法。或许只是我菜而已)。

[ 本帖最后由 zljzsmzzx 于 2009-7-2 17:42 编辑 ]
作者: Batcher    时间: 2009-7-2 17:51

参考:http://bbs.bathome.net/thread-2130-1-1.html
作者: netbenton    时间: 2009-7-2 20:52

::把64k内任意文件转换为debug 可以接受输入格式,以便将其嵌入到批处理程序中。
::用法:把要处理的文件拖到本批处理上即可
             或者在cmd命令行运行本批处理时,把要处理的文件作为第一个参数,
             如果本代码存为mfd.bat,则:

           
mfd 要处理的文件名
  1. @echo off
  2. set/a size=%~z1
  3. set/a si=size/512+1
  4. ::取文件大小
  5. pushd %~dp1
  6. echo;&echo;&echo 正在转换请稍候。。。。。。
  7. (echo ;可用于在DEBUG里恢复成二进制程序的16进制数据,n后面的文件名不能以.exe为扩展名。
  8. echo a
  9. call :hex %1
  10. echo n 文件名
  11. echo w
  12. echo q
  13. )>for_debug.txt
  14. start for_debug.txt
  15. del %~n0.fc /q
  16. goto :eof
  17. :hex
  18. setlocal enabledelayedexpansion
  19. for /l %%a in (1,1,128) do (set spac=!spac!    )
  20. (for /l %%k in (1,1,!si!) do set /p=!spac!%~n0.fc
  21. ::准备一个比当前文件大的全空格文件
  22. set n=-1
  23. for /f "skip=1 tokens=1-3 delims=: " %%a in ('fc %~n0.fc %~nx1 /b') do (
  24.         if "%%a"=="FC" goto :fcok
  25.         set/a _a=0x%%a,n+=1
  26.         if !_a! neq !n! (
  27.                 set /a n+=1
  28.                 for /l %%z in (!n!,1,!_a!) do (set "fc=!fc! 20")
  29.                 set /a n=_a
  30.         )
  31.         set "fc=!fc! %%c"
  32.         if "!fc:~60!" neq "" (echo;db!fc:~,60!&set fc=!fc:~60!)
  33. )
  34. ::利用fc 的二进制对比,取十六进制编码,并生成debug 可以接受的输入串
  35. :fcok
  36. echo;db!fc!
  37. call :o-h 调用子过程,把文件大小转为16进制。
  38. echo r cx
  39. echo !hh:~-4!
  40. if "!hh:~4!" neq "" (echo r bx&echo !hh:~,-4!)
  41. ::转为debug可以接受的格式,低位在cx寄存器,高位在bx寄存器。
  42. endlocal
  43. goto :eof
  44. :o-h
  45. set n=0
  46. 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)
  47. :ohlp
  48. set/a one=size%%16,size=size/16
  49. set hh=!h%one%!!hh!
  50. if !size! equ 0 goto :eof
  51. 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 编辑 ]
作者: hackerlong    时间: 2009-7-3 02:18

五楼的怎么使用代码那能写清楚吗?我用了下还没试出来。
作者: hackerlong    时间: 2009-7-3 02:34     标题: 回复 4楼 的帖子

batcher能教我怎么把第三方软件编程debug啊!
作者: netbenton    时间: 2009-7-3 07:46

五楼已更新,加入具体使用方法。
该工具仅仅是帮你把文件处理成为debug可以接受的数据,如何还原楼主还要另外了解debug,及如何进行管道操作。
常用方法:
(1)

(echo a
echo db cd 21
echo;
echo r cx
echo 02
echo n abc.com
echo w
echo q) |debug >nul


(2) 把数据存为临时文件:abc.txt
debug <abc.txt>nul


(3) 直接把批处理本身作为管道输入文本
@echo off
goto :begin
;可用于在DEBUG里恢复成二进制程序的16进制数据,n后面的文件名不能以.exe为扩展名。
a
db B8 00 00 CD 16 88 E0 B4 4C CD 21
r cx
b
n abc.com
w
q
:begin
debug < %0 >nul
dir abc.com
pause


另外还有more用法,请看4楼给出的链接。

其实可以处理64k以上的文件,只是64k已经是debug的一个段的上限,处理起来较麻烦。

[ 本帖最后由 netbenton 于 2009-7-3 12:59 编辑 ]
作者: Batcher    时间: 2009-7-3 09:32     标题: 回复 7楼 的帖子

any2bat之批处理版和VBS版
http://bbs.bathome.net/thread-4435-1-1.html
作者: netbenton    时间: 2009-7-3 12:57

原来已经有那么多的经典贴子了,
回贴学习来了,呵呵。。
作者: zljzsmzzx    时间: 2009-7-3 13:58

哈!我收回3楼的话。以后真要谦虚一点了。收藏,闪人,慢慢研究。楼下的继续。
作者: hackerlong    时间: 2009-7-5 15:20

我笨啊!还是没试出来。各位大虾们能给个例子吗?




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2