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/tmp
sistem 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/cc
ke/home/<myname>/cc
, dan menggunakandd
untuk menambal biner menggunakan/tmp
bukannya/usr/tmp
, yang lebih besar. Tentu saja, ini hanya memperburuk masalah – ruang disk yang ditempati oleh salinan ini memang penting saat itu, dan sekarang/tmp
diisi 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