我读过几次(下面)这个引用,最近一次是在这里阅读的,并且不断地困惑于如何dd
使用它来修补任何东西,更不用说编译器了:
我30年前在学校使用的Unix系统在RAM和磁盘空间方面非常有限。特别是
/usr/tmp
文件系统非常小,当有人尝试编译大型程序时会导致问题。当然,无论如何,学生都不应该编写“大型程序”。大型程序通常是从“某处”复制的源代码。我们中的许多人都复制/usr/bin/cc
到/home/<myname>/cc
,并用来dd
修补二进制文件,/tmp
而不是来使用/usr/tmp
更大的二进制文件。当然,这只会使问题变得更糟-这些副本所占用的磁盘空间在当时确实很重要,并且现在会/tmp
定期装满,从而阻止其他用户甚至编辑其文件。他们发现发生了什么事后,系统管理员执行了chmod go-r /bin/* /usr/bin/*
它“解决”了问题,并删除了我们所有的C编译器副本。
(强调我的)
该dd
手册页只字未提修补和不认为它可能是重新定意要做到这一点呢。
二进制文件真的可以修补dd
吗?这有任何历史意义吗?
od
一个文件,用于字节的十六进制代码,找到所需的偏移量,决定进行编辑,然后直接bs=$patchsize count=1 seek=$((offset/bs)) conv=notrunc
在其中添加补丁