2010-05-24 13 views
7

Şu anda derlenmiş bir ELF uygulamasına veri eklemenin bir yolunu arıyorum, yani dosyayı yeniden derleme olmadan yürütülebilir dosyaya gömme.Bir dosyayı ELF uygulamasına aktarma

Bunu cat myexe mydata > myexe_with_mydata kullanarak kolayca yapabilirim, ancak yürütülebilir dosyadaki verilere erişemedim çünkü orijinal yürütülebilir dosyanın boyutunu bilmiyorum.

Bunu nasıl uygulayabileceğimin bir fikri var mı? Yürütülebilir dosyaya bir bölüm eklemeyi veya yürütülebilir dosyadaki verilerin başlangıcını algılamak için özel bir işaretçi (örneğin, 0xBADBEEFC0FFEE) kullanmayı düşündüm, ancak bunu yapmanın daha güzel bir yolu olup olmadığını bilmiyorum.

Şimdiden teşekkürler.

cevap

5

Sen objcopy (1) ile özel bir bölüm olarak elf dosyasına dosyayı ekleyebilirsiniz: oldelf olmayacak (

objcopy --addsection sname=file oldelf newelf 

oldelf ve newelf sonuçları yazmak için dosyayı katacak modifiye edilmiş) Daha sonra elf dosyasını okumak ve bölümü ismiyle ayıklamak için libbfd'u kullanabilir veya bölüm tablosunu okuyan kendi bölümünüzü okuyabilir ve bölümünüzü bulabilirsiniz. Sistemin beklediği herhangi bir şeyle çarpışmayan bir bölüm adı kullandığınızdan emin olun - adınız . ile başlamıyorsa, iyi olmalısınız.

+0

Bunu yapabildiğimi objcopy bilmiyordum! Teşekkürler. –

1

objcopy kullanarak gömülü bölümleri ayıklamak/başvurmak için basit bir arabirim sağlayan elfdataembed adlı küçük bir kitaplık oluşturdum. Bu, ofset/boyutu başka bir araca aktarmanıza veya dosya tanımlayıcılarını kullanarak çalışma zamanından doğrudan referans almanıza olanak tanır. Umarım bu gelecekte birisine yardımcı olur.

Bu yaklaşım, harici araçların ayıklanmaya gerek kalmadan veriye başvurmalarına izin verdiği için bir simgeyi derlemekten daha verimli olduğundan bahsetmeye değerdir ve ayrıca tüm ikili öğelerin belleğe yüklenmesini gerektirmez. ayıklamak/başvurmak.

İlgili konular