GNU/Linux >> Belajar Linux >  >> Linux

Bisakah saya mengubah 'rpath' dalam biner yang sudah dikompilasi?

Ada alat yang lebih universal daripada chrpath disebut patchelf . Awalnya dibuat untuk digunakan dalam pembuatan paket untuk Nix dan NixOS (sistem pengemasan dan distribusi GNU/Linux).

Jika tidak ada rpath dalam biner (di sini disebut rdsamp), chrpath gagal:

chrpath -r '$ORIGIN/../lib64' rdsamp 
rdsamp: no rpath or runpath tag found.

Di sisi lain,

patchelf --set-rpath '$ORIGIN/../lib64' rdsamp

berhasil dengan baik.


Ada alat bernama chrpath yang dapat melakukan ini - mungkin tersedia dalam paket distribusi Anda.


Seperti yang dikatakan @user7610, cara yang benar adalah patchelf alat.

Namun, saya merasa dapat memberikan jawaban yang lebih komprehensif, mencakup semua perintah yang diperlukan untuk melakukan hal itu.

Untuk artikel lengkap tentang subjek ini, klik di sini

Pertama-tama, banyak pengembang berbicara tentang RPATH , tetapi sebenarnya artinya RUNPATH . Ini adalah dua bagian dinamis opsional yang berbeda, dan loader menanganinya dengan sangat berbeda. Anda dapat membaca selengkapnya tentang perbedaan keduanya di tautan yang saya sebutkan sebelumnya.

Untuk saat ini, ingat saja:

  • Jika RUNPATH disetel, RPATH diabaikan
  • RPATH sudah usang dan harus dihindari
  • RUNPATH lebih disukai karena dapat ditimpa oleh LD_LIBRARY_PATH

Lihat R[UN]PATH saat ini

readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"

Hapus R[UN]PATH

patchelf --remove-rpath <path-to-elf>

Catatan:

  • Hapus kedua RPATH dan RUNPATH

Tambahkan nilai ke R[UN]PATH

patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>

Catatan:

  • <desired-path> adalah daftar direktori yang dipisahkan titik dua, misalnya:/my/libs:/my/other/libs
  • Jika Anda menentukan --force-rpath , tetapkan RPATH , jika tidak tetapkan RUNPATH

Linux
  1. menggunakan RPATH tetapi bukan RUNPATH?

  2. memeriksa apakah biner dikompilasi dengan -statis

  3. Bootloader saya tidak dapat dikompilasi dengan gcc 4.6 dan 4.7 ... hanya 4.5

  1. Bagaimana saya bisa mengubah versi php-cli di Ubuntu 14.04?

  2. Bagaimana saya bisa mengubah grup default pengguna di Linux?

  3. Bisakah saya mengubah SID dari database Oracle?

  1. Jika Chown Dapat Mengubah Grup, Mengapa Chgrp Dibuat?

  2. Linux – Bisakah Kita Mendapatkan Informasi Kompilator Dari Biner Elf?

  3. Bisakah Anda mengubah versi metadata pada larik yang ada?