SORU
1 ŞUBAT 2011, Salı


C GCC ile C/: Statik/kütüphane yürütülebilir kaynak dosyaları Ekle

Herkes için nasıl bir fikir var statik olarak herhangi bir kaynak doğru yürütülebilir ya da paylaşılan kitaplık dosyası GCC kullanarak derleme dosyası mı?

Örneğin asla (ve eğer yaparlarsa, bu dosya zaten var değiştirmek istiyorum) değiştirmek ve onları istemem eklemek resim dosyaları dosya sisteminde yalan söylemeyi ben de isterdim.

Eğer bu mümkün (ve Windows için Visual C de bunu yapabilir, çünkü ben öyle düşünüyorum), nasıl kendi ikili depolanan dosyalar yükleyebilir miyim? Çalıştırılabilir dosyanın kendisi ayrıştırma, dosyayı bulmak ve veri özü var mı?

Belki de henüz görmedim GCC için bir seçenek var. Arama motorları kullanarak gerçekten doğru şeyler tükürmek değildi.

Bu paylaşılan kitaplıklar ve ELF çalıştırılabilir normal çalışmaya ihtiyacım var.

Herhangi bir yardım için teşekkür ederiz

CEVAP
1 ŞUBAT 2011, Salı


Objcopy (GNU binutils) bir dosyadan ikili veri foo-veri bağlantısı için kullandım.çalıştırılabilir dosya: veri bölümüne bin

objcopy -B i386 -I binary -O elf32-i386 foo-data.bin foo-data.o

Bu dosyaya bağlayabilirsiniz foo-data.o nesne dosyası verir. C arayüzü gibi bir şey görünüyor

/** created from binary via objcopy */
extern uint8_t foo_data[]      asm("_binary_foo_data_bin_start");
extern uint8_t foo_data_size[] asm("_binary_foo_data_bin_size");
extern uint8_t foo_data_end[]  asm("_binary_foo_data_bin_end");

gibi şeyler yapabilirsiniz

for (uint8_t *byte=foo_data; byte<foo_data_end;   byte) {
    transmit_single_byte(*byte);
}

ya

size_t foo_size = (size_t)((void *)foo_data_size);
void *foo_copy = malloc(foo_size);
memcpy(foo_copy, foo_data, foo_size);

Eğer hedef mimariye sahiptir özel kısıtlamaları olarak nerede sabit ve değişken veri saklanır, ya da istediğin için saklayan veri .text kesimi için uygun içine aynı bellek türü programın kodu, sen-ebilmek oyun ile objcopy parametreleri biraz daha fazla.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ash100HD

    Ash100HD

    29 EKİM 2011
  • BradleyWuzHere

    BradleyWuzHe

    25 NİSAN 2011
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010