Saya telah membaca kutipan ini (di bawah) beberapa kali, terakhir di sini, dan saya terus-menerus bingung bagaimana dd dapat digunakan untuk menambal apa saja apalagi kompiler:
Sistem Unix yang saya gunakan di sekolah, 30 tahun yang lalu, sangat terbatas dalam RAM dan ruang Disk. Terutama,
/usr/tmpsistem file sangat kecil, yang menyebabkan masalah ketika seseorang mencoba untuk mengkompilasi program besar. Tentu saja, siswa tidak seharusnya menulis “program besar”; program besar biasanya kode sumber disalin dari "suatu tempat". Banyak dari kita menyalin/usr/bin/ccke/home/<myname>/cc, dan menggunakandduntuk menambal biner menggunakan/tmpbukannya/usr/tmp, yang lebih besar. Tentu saja, ini hanya memperburuk masalah – ruang disk yang ditempati oleh salinan ini memang penting saat itu, dan sekarang/tmpdiisi secara teratur, mencegah pengguna lain bahkan mengedit file mereka. Setelah mereka mengetahui apa yang terjadi, sysadmin melakukanchmod go-r /bin/* /usr/bin/*yang “memperbaiki” masalah, dan menghapus semua salinan kompiler C kami.
(Tekankan milikku)
dd halaman manual tidak mengatakan apa-apa tentang menambal dan tidak berpikir itu dapat digunakan kembali untuk melakukan ini.
Bisakah binari benar-benar ditambal dengan dd ? Apakah ada signifikansi historis untuk ini?
Jawaban yang Diterima:
Mari kita coba. Berikut program C sepele:
#include <stdio.h>
int main(int argc, char **argv) {
puts("/usr/tmp");
}
Kami akan membuatnya menjadi test :
$ cc -o test test.c
Jika kita menjalankannya, ia akan mencetak “/usr/tmp”.
Mari kita cari tahu di mana “/usr/tmp ” ada dalam biner:
$ strings -t d test | grep /usr/tmp
1460 /usr/tmp
-t d mencetak offset dalam desimal ke dalam file setiap string yang ditemukan.
Sekarang mari kita buat file sementara hanya dengan “/tmp