使用DEBUG创建行片段

DEBUG可以创建一个 "行片段"(没有通常的carrier-return的行)。不需要汇编语言! 只需将DEBUG作为二进制编辑器使用。

像许多DOS命令一样,DEBUG可以从键盘或重定向文件中运行。在下面的批处理文件中,我用ECHO创建了一个文件(命名为SCRIPT),它将被重定向到DEBUG。

echo e 100 "set value="> script
echo rcx>> script
echo a>> script
echo n fragment.txt>> script
echo w>> script
echo q>>script
debug < script > nul
del script

上面的代码将创建一个 "script" 文件,内容如下:


e 100 "set value="
rcx
a
n fragment.txt
w
q


让我们检查一下将被创建的脚本文件。实际上你可以启动debug并手工输入上述所有命令。首先我们输入一些文本(从地址100开始,这是所有调试文件的默认开头)。这可以是空格或以逗号分隔的十六进制数值,也可以是带引号的文本。我选择了输入SET VALUE=。 你可以输入任何你想要的东西。很明显,在这个例子中,我打算创建一个名为VALUE的环境变量,并在其中填入一些内容 接下来我需要设置文件的大小。这一部分需要你计算字符数。我的文本总共使用了10个字符(即十六进制A)。文件长度存储在CX寄存器中,通过RCX命令,我们可以为CX寄存器输入一个新值。我们输入的值是A。在这一点上,内存中的所有东西都是我们想要的样子。我们为文件输入一个名称(我选择了FRAGMENT.TXT),然后把它写到磁盘上。然后我们就可以退出了。

运行上述批处理文件后,我们将有一个名为 FRAGMENT.TXT 的 10 字节文件,其中只包含 SET VALUE=,行末没有 CR/LF。

显然,如果你确切地知道你的文本有多长(在这个例子中是10个字节),你可以简单地适当设置CX寄存器(在这个例子中是A)。如果你想创建一个更通用的工具,可以接受任何合理的行,你可以尝试这个技巧。用EOF字符(十六进制1A)填充一行。让你想要的数据覆盖一些EOF字符。当DOS处理这一行时,它将忽略所有的EOF字符。下面是你要做的。

echo f 100 L 80 1a> script
echo e 100 %2 %3 %4 %5 %6 %7 %8 %9>> script
echo rcx>> script
echo 80>> script
echo n %1>> script
echo w>> script
echo q>>script
debug < script > nul
del script

这将使内存从地址100(默认)开始,长度为80(十六进制),DOS文件结束字符为1A。80的十六进制是128的十进制,这是命令行的最大长度。你可以把文件名作为第一个参数,把你想要的文本作为附加参数。你将用更通用的%1和%2来取代不灵活的FRAGMENT.TXT和SET VALUE=。如果需要对生成的文件进行清理(设置其长度,使其没有 EOF 字符),可以用这两种方法中的任何一种来完成。

copy /a fragment.txt clean.txt
type fragment.txt > clean.txt

Of course, 我们用 COPY 去合并 文本文件,不用指定/a开关
copy fragment.txt + someline.txt result.txt

这里有一个把片段、批处理文件和调试脚本合而为一的技巧。如下所示,它创建了一个片段,把你想要的东西添加到片段中以创建一个新行,然后执行新行(假设新行是一个批处理文件)。


@echo off
echo set value=> ~.bat
echo e 010a 1a >> ~.bat
echo w >> ~.bat
echo q >> ~.bat
type ~.bat | debug ~.bat> nul
type ~.bat | more> ~.bat
echo Your Command Output Goes Here!>> ~.bat
call ~.bat
del ~.bat


首先,我们在文件中加入SET VALUE=(结尾处有一个不可避免的回车键)。然后我们在同一文件中附加一个DEBUG脚本。不要担心,DEBUG会忽略批处理命令,修改它自己的脚本不会有问题。E 010A 1A将在地址010A处输入数值1A(文件结束字符)。

由于文件总是从0100开始,这里装了 "A"(10)个字符。“set value"中的 "s "是零字符,"e "是第一个,"t "是第二个,......这使得第十个字符就在等号之后。ECHO W使DEBUG脚本将我们的修改写入磁盘,ECHO Q将退出DEBUG。然后,我们把脚本TYPE到DEBUG中,并把它的输出重定向到NUL中,这样就不会造成屏幕上的垃圾。使用TYPE和 "管道 "可以使DEBUG看起来像在修改一个正在运行的脚本。

下一步是在我们插入文件结束符的地方砍掉我们的文件。TYPE ~.BAT | MORE > ~.BAT就是这样做的。切断是由TYPE命令完成的,但我通过MORE来处理,只是为了获得一个中间步骤,使我能够为输出文件使用相同的名字。
MORE有一个有趣的习惯,就是在文件的开头加上一个回车键,但我只关心保护我的文件的结尾,所以这没什么。现在你可以以任何方式附加任何你想要的东西。本例中~.BAT的最终结果是

set value=Your Command Output Goes Here!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值