Saya berada di luar target gdb yang dapat dieksekusi dan saya bahkan tidak memiliki tumpukan yang sesuai dengan target itu. Saya ingin melakukan satu langkah, sehingga saya dapat memverifikasi apa yang terjadi dalam kode assembly saya, karena saya bukan ahli dalam perakitan x86. Sayangnya, gdb menolak melakukan proses debug tingkat rakitan sederhana ini. Ini memungkinkan saya untuk menyetel dan berhenti pada breakpoint yang sesuai, tetapi segera setelah saya mencoba satu langkah ke depan, gdb melaporkan kesalahan "Tidak dapat menemukan batas fungsi saat ini" dan EIP tidak berubah.
Detil tambahan:
Kode mesin dihasilkan oleh pernyataan gcc asm dan saya menyalinnya ke lokasi memori kernel tempat ia dijalankan, dari keluaran objdump -d. Saya tidak keberatan dengan cara sederhana menggunakan loader untuk memuat kode objek saya ke alamat yang direlokasi, tetapi perlu diingat bahwa pemuatan harus dilakukan dalam modul kernel.
Saya kira alternatif lain adalah menghasilkan modul kernel palsu atau file info debug untuk diberikan kepada gdb, agar percaya bahwa area ini ada di dalam kode program. gdb berfungsi dengan baik pada kernel yang dapat dieksekusi itu sendiri.
(Bagi mereka yang benar-benar ingin tahu, saya menyisipkan kode saat runtime ke dalam ruang data kernel Linux di dalam VMware VM dan men-debugnya dari debugging jarak jauh gdb kernel melalui rintisan gdb bawaan VMware Workstation. Catatan Saya tidak menulis kernel eksploitasi; Saya seorang mahasiswa pascasarjana keamanan yang menulis prototipe.)
(Saya dapat mengatur breakpoint pada setiap instruksi di dalam assembly saya. Ini berfungsi tetapi akan menjadi sangat melelahkan setelah beberapa saat, karena ukuran instruksi perakitan x86 bervariasi dan lokasi perakitan akan berubah setiap kali saya reboot.)