GNU/Linux >> Belajar Linux >  >> Linux

Posisikan Executable Independen dan Android

Saya tidak tahu apa-apa tentang PIE, Tolong beri tahu saya cara membuat posisi yang dapat dieksekusi secara independen.

Position Independent Executable atau PIE memungkinkan sebuah program untuk dipindahkan, seperti objek yang dibagikan. Pada setiap menjalankan program, program dapat dimuat di alamat yang berbeda untuk mempersulit penyerang menebak status program tertentu.

Anda dapat mengompilasi dan menautkan PIE yang dapat dieksekusi dengan salah satu dari dua cara. Pertama, kompilasi semuanya dengan -fPIE dan tautkan dengan -pie . Yang kedua adalah mengkompilasi semuanya dengan -fPIC dan tautkan dengan -pie .

Jika Anda membuat objek bersama dan program, kompilasi semuanya dengan -fPIC . Tautkan objek bersama dengan -shared , dan tautkan program dengan -pie .

Anda tidak dapat melakukannya dengan cara lain. Artinya, Anda tidak dapat mengkompilasi semuanya dengan -fPIE dan membangun objek bersama dan program. Untuk mengetahui detailnya, lihat Opsi Pembuatan Kode di manual GCC.

Satu hal yang harus diperhatikan di Android:membangun dengan PIE sebelum 4.1 akan menyebabkan kesalahan segmentasi di /system/bin/linker . PIE ditambahkan di Android 4.1, dan menyebabkan crash pada versi yang lebih rendah.

Seseorang mengatakan kepada saya untuk menyediakan tautan/pemuat khusus untuk menghindari masalah, tetapi saya tidak dapat menemukan referensi saat ini.

Lihat juga Penyempurnaan Keamanan di Android 1.5 hingga 4.1.

Kesalahan:hanya position independent executable (PIE) yang didukung

Ya, itu adalah fitur Lollipop. Lihat Penyempurnaan Keamanan di Android 5.0.

Anda dapat memeriksa apakah suatu program dibuat dengan PIE menggunakan readelf :

$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)

Bagian yang penting adalah readelf melaporkan DYN , dan tidak melaporkan EXE . EXE berarti tidak memiliki PIE, dan itu akan memicu cacat terkait keamanan.

Terkait, lihat Apakah PIE (Position-independent executable) untuk executable utama didukung di Android 4.0 (ICS)?


saya tahu ini adalah topik lama tetapi cara hacky ini dapat menghemat waktu beberapa orang
dengan Hex-Editor , temukan byte ke-17, ubah nilainya 02 menjadi 03, dan selesai!


Linux
  1. Memisahkan Fungsi Front-end dan Cl Program Gui?

  2. Program Shell Untuk Hanya Membuka Driver Karakter Dan Tunggu?

  3. Sinkronisasi DAEMON – Menyinkronkan Data dari Linux ke Perangkat Android dan iOS

  1. Cara memprogram dengan Bash:Sintaks dan alat

  2. Bagaimana cara menyalin dan mengedit file di shell Android?

  3. android Gagal memulai emulator:Tidak dapat menjalankan program

  1. Cara Mengkompilasi dan Menjalankan Program C di Ubuntu

  2. Instal SoftHSM dan Akses melalui Program Java

  3. Perbedaan Antara Program Starter Systemd Dan Terminal?