Pertanyaan Jalankan kode dalam tumpukan proses, pada Linux baru-baru ini


Saya ingin menggunakan ptrace untuk menulis sepotong kode biner dalam tumpukan proses yang sedang berjalan. Namun, ini menyebabkan kesalahan segmentasi (sinyal 11).

Saya dapat memastikan register% eip menyimpan pointer ke instruksi pertama yang ingin saya jalankan dalam stack. Saya kira ada beberapa mekanisme linux yang melindungi data stack untuk dapat dieksekusi.

Jadi, apakah ada yang tahu cara menonaktifkan perlindungan tersebut untuk stack. Secara khusus, saya mencoba Fedora 15.

Terima kasih banyak!


Setelah membaca semua balasan, saya mencoba execstack, yang benar-benar membuat kode di stack dieksekusi. Terima kasih semua!


4
2018-06-26 07:42


asal


Jawaban:


Ini mungkin disebabkan oleh NX bit pada prosesor modern. Anda mungkin dapat menonaktifkan ini untuk menggunakan program Anda execstack.

http://advosys.ca/viewpoints/2009/07/disabling-the-nx-bit-for-specific-apps/

http://linux.die.net/man/8/execstack


5
2018-06-26 07:51



Seperti telah disebutkan, ini disebabkan oleh bit NX. Tetapi itu mungkin. Saya tahu pasti bahwa gcc menggunakannya sendiri untuk trampolin (yang merupakan solusi untuk membuat misalnya fungsi pointer fungsi bertingkat). Saya tidak melihat detailnya, tetapi saya akan merekomendasikan melihat kode gcc. Cari di sumber untuk makro khusus arsitektur TARGET_ASM_TRAMPOLINE_TEMPLATE, di sana Anda harus melihat bagaimana mereka melakukannya.

EDIT: Google cepat untuk makro itu, memberi saya petunjuk: mprotect digunakan untuk mengubah izin dari halaman memori. Juga berhati-hatilah ketika Anda menghasilkan tanggal dan menjalankannya - Anda mungkin memiliki selain menyiram cache instruksi.


2
2018-06-26 09:37