Стоит задача - в программе запрятать бинарные данные. Допустим архив.Создаём файл 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.oURL:
Обсуждается: http://www.opennet.me/tips/info/2936.shtml
уважаемый студент, ваше стремление к написанию примитивных гайдов для одноклеточных похвально,
но давайте вы перестанете изобретать давно изобретённые велосипеды и приделывать к ним колёса произвольной формы, серьёзно, ваши гайдики печальны и бесполезны для любого человека осилившего гугл.первый пример из закромов (закладок):
https://balau82.wordpress.com/2012/02/19/linking-a-binary-bl.../
А так чем плохо? Ничего дополнительно делать не надо.
__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;
>А так чем плохо?wow. Очень, очень хорошо.
Ассемблерные вставки не есть хорошо.
man xxd
10 mb?
Делается один раз: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.057stime gcc -c random.c
real 0m9.414s
user 0m8.947s
sys 0m0.350s
А не проще volatile char a[DATASIZE] = {бинарь}?
> А не проще volatile char a[DATASIZE] = {бинарь}?Двоичные патчОры ещё не открыли для себя генерацию программ, здесь - хексов в Си. Бинарное программирование оно такое -- сложное и малодоступное.
$ rar a -sfx bash.exe out.tar;