GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengekstrak hanya konten mentah dari bagian ELF?

Peretasan yang agak janggal di sekitar objdump dan dd :

IN_F=/bin/echo
OUT_F=./tmp1.bin
SECTION=.text

objdump -h $IN_F |
  grep $SECTION |
  awk '{print "dd if='$IN_F' of='$OUT_F' bs=1 count=$[0x" $3 "] skip=$[0x" $6 "]"}' |
  bash

objdump -h menghasilkan output yang dapat diprediksi yang berisi offset bagian dalam file elf. Saya membuat awk untuk menghasilkan dd perintah untuk shell, sejak dd tidak mendukung angka heksadesimal. Dan memberi perintah ke shell.

Dulu saya melakukan semua itu secara manual, tanpa membuat skrip apa pun, karena jarang diperlukan.


Gunakan -O binary format keluaran:

objcopy -O binary --only-section=.text foobar.elf foobar.text

Cukup verifikasi dengan avr-objcopy dan .text gambar AVR ELF bagian.

Perhatikan bahwa jika, seperti yang ditunjukkan Tim di bawah, bagian Anda tidak memiliki flag ALLOC, Anda mungkin harus menambahkan --set-section-flags .text=alloc untuk dapat mengekstraknya.


objcopy --dump-section

Diperkenalkan di Binutils 2.25, dan mencapai efek yang mirip dengan -O binary --only-section .

Penggunaan:

objcopy --dump-section .text=output.bin input.o

https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html mendokumentasikannya sebagai:

--dump-section sectionname=namaberkas

Tempatkan isi bagian bernama namabagian ke dalam nama file file, timpa semua konten yang mungkin sudah ada sebelumnya. Opsi ini kebalikan dari --add-section. Opsi ini mirip dengan opsi --only-section kecuali bahwa opsi ini tidak membuat file yang diformat, opsi ini hanya membuang konten sebagai data biner mentah, tanpa menerapkan relokasi apa pun. Opsi dapat ditentukan lebih dari sekali.

Contoh minimal yang dapat dijalankan

main.S

.data
    .byte 0x12, 0x34, 0x56, 0x78
.text
    .byte 0x9A, 0xBC, 0xDE, 0xF0

Merakit:

as -o main.o main.S

Ekstrak data:

objcopy --dump-section .data=data.bin main.o
hd data.bin

Keluaran:

00000000  12 34 56 78                                       |.4Vx|
00000004

Ekstrak teks:

objcopy --dump-section .text=text.bin main.o
hd text.bin

Keluaran:

00000000  9a bc de f0                                       |....|
00000004

Diuji di Ubuntu 18.04 amd64, Binutils 2.30.


Linux
  1. Cara Menyisipkan Teks di awal setiap baris di Vim

  2. Di mana Deskripsi Isi Bagian Man?

  3. Bagaimana cara mengekstrak isi rpm?

  1. Cara Mengekstrak File tar.gz di Linux dengan Menggunakan Command Line

  2. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  3. Bagaimana cara menampilkan isi file secara rekursif?

  1. Bagaimana cara menyisipkan teks di awal file?

  2. Cara hanya mendapatkan jumlah baris file

  3. Bagaimana cara mengekstrak teks dengan OCR dari PDF di Linux?