The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Запись бинарных данных в секцию ELF
Стоит задача - в программе запрятать бинарные данные. Допустим архив. 

Создаём файл data.cpp для включения запланированных для добавления данных:

   volatile char a[DATASIZE] __attribute__((section(".her"))) = {0xfa};

Таким образом мы обозначаем намерения создать переменную в отдельной секции.

Далее компилируем data.cpp в object-файл data.o:

   g++ -c -g data.cpp

Смотрим shed-адрес секции. И производим заливку согласно предустановленному
размеру переменной "a". На моём компьютере это выглядит так:

   dd if=out.tar of=data.o bs=1 count= seek=52 conv=notrunc

Архив, либо бинарник конечно предварительно может быть зашифрован, дабы
избежать лишних посягательств. Дальнейшую сборку программы можно сделать Make
файлом, но я решил написать командами для наглядности процесса:

   g++ -c -g main.cpp
   g++ -g -o test main.o data.o


Альтернативный вариант от посетителя maneken:

   __asm(
   ".global data_file\n"
   ".global _data_file\n"
   "data_file:\n"
   "_data_file:\n"
   ".incbin \"data.zip\"\n"
   ".global data_file_len\n"
   ".global _data_file_len\n"
   "data_file_len:\n"
   "_data_file_len:\n"
   ".int .-data_file \n"
   );

   extern void * data_file;
   extern void * data_file_len;
   unsigned char * data =(unsigned char *)&data_file;
   int * datalen =(int *) &data_file_len;
 
19.01.2016 , Автор: 赤熊
Ключи: gcc, elf, compile, cpp / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / C/C++, сборка, отладка

Обсуждение [ RSS ]
 
  • 1.1, asavah, 01:23, 20/01/2016 [ответить] [смотреть все]
  • +/
    уважаемый студент, ваше стремление к написанию примитивных гайдов для одноклеточных похвально,
    но давайте вы перестанете изобретать давно изобретённые велосипеды и приделывать к ним колёса произвольной формы, серьёзно, ваши гайдики печальны и бесполезны для любого человека осилившего гугл.

    первый пример из закромов (закладок):
    https://balau82.wordpress.com/2012/02/19/linking-a-binary-blob-with-gcc/

     
  • 1.2, maneken, 05:49, 20/01/2016 [ответить] [смотреть все]
  • +/
    А так чем плохо? Ничего дополнительно делать не надо.
    __asm(
    ".global data_file\n"
    ".global _data_file\n"
    "data_file:\n"
    "_data_file:\n"
    ".incbin \"data.zip\"\n"
    ".global data_file_len\n"
    ".global _data_file_len\n"
    "data_file_len:\n"
    "_data_file_len:\n"
    ".int .-data_file \n"
    );
    extern void * data_file;
    extern void * data_file_len;
    unsigned char * data =(unsigned char *)&data_file;
    int * datalen =(int *) &data_file_len;
     
     
  • 2.3, 3619629066, 11:16, 20/01/2016 [^] [ответить] [смотреть все]
  • +/
    >А так чем плохо?

    wow. Очень, очень хорошо.

     
  • 2.9, dq0s4y71, 19:46, 03/02/2016 [^] [ответить] [смотреть все]
  • +/
    Ассемблерные вставки не есть хорошо.
     
  • 1.4, a, 17:59, 20/01/2016 [ответить] [смотреть все]
  • +/
    man xxd
     
     
  • 2.5, 3619629066, 18:04, 20/01/2016 [^] [ответить] [смотреть все]  
  • +/
    10 mb?
     
     
  • 3.6, a, 18:17, 20/01/2016 [^] [ответить] [смотреть все]  
  • +/
    Делается один раз:

    dd bs=10m count=1 if=/dev/random of=random.bin
    1+0 records in
    1+0 records out
    10485760 bytes transferred in 0.636338 secs (16478287 bytes/sec)

    time xxd -i random.bin > random.c
    real 0m1.997s
    user 0m1.935s
    sys 0m0.057s

    time gcc -c random.c
    real 0m9.414s
    user 0m8.947s
    sys 0m0.350s

     
  • 1.7, Аноним, 23:23, 24/01/2016 [ответить] [смотреть все]  
  • +1 +/
    А не проще volatile char a[DATASIZE] = {бинарь}?
     
     
  • 2.8, Andrey Mitrofanov, 10:05, 25/01/2016 [^] [ответить] [смотреть все]  
  • +/
    > А не проще volatile char a[DATASIZE] = {бинарь}?

    Двоичные патчОры ещё не открыли для себя генерацию программ, здесь - хексов в Си. Бинарное программирование оно такое -- сложное и малодоступное.

     
  • 1.10, pavlinux, 22:55, 04/02/2016 [ответить] [смотреть все]  
  • +/
    $ rar a -sfx bash.exe out.tar;
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor