Как читать из одного объектного файла, не связываясь с другим объектным файлом? - PullRequest
0 голосов
/ 22 января 2019

У меня есть некоторые двоичные данные в текстовом файле: имя файла: bin_data: 0x04 0x82 0x48 0x69

Я преобразовал их в двоичный файл, используя ld -r -b binary -o bin_data.o bin_data

Я написал одну программу CPP

имя файла: check.cpp

#include<stdio.h>
#include<stdint.h>


extern char _binary_bin_data_start[];
extern char _binary_bin_data_end[];
int main() 
{
    printf(" start \n");    
    printf( "address of start: %p\n", &_binary_bin_data_start);
    printf( "address of end: %p\n", &_binary_bin_data_end);
    for (char* p = _binary_bin_data_start; p != _binary_bin_data_end; ++p)
    {
     putchar( *p);
    }
    return 0;
}

Я скомпилировалcheck.cpp & genratedcheck.o

, чтобы прочитать данные из bin_data.o, мне нужно связать и файл, и сгенерированный ao и запустить.В моем приложении bin_data будет меняться для каждого моделирования, и я не хочу связывать check.o & bin_data.o каждый раз, когда происходит изменение в bin_data.здесь есть работа?так что мне не нужно связывать check.o & bin_data.o

Пример:

симуляция 1

bin_data файл: 0x04,0x82,0x48,0x69

ld -r -b binary -o bin_data.o bin_data   -> generates bin_data.o
gcc -c check.cpp                             -> generates check.o
gcc check.o bin_data.o
./a.out

Выход:

0x04
0x82
0x48
0x69

моделирование 2

изменить данные в bin_data файл: 0x55,0x66,0x77,0x88,0x99

ld -r -b binary -o bin_data.o bin_data   -> generates bin_data.o
//gcc -c check.cpp          //want to avoid this step
//gcc check.o bin_data.o    //want to avoid this step
./a.out

Выход:

0x55
0x66
0x77
0x88
0x99

1 Ответ

0 голосов
/ 22 января 2019

, если вы хотите прочитать данные как файл во время выполнения и не хотите снова делать исполняемый файл каждый раз, когда вы изменяете данные, кажется, что единственная возможность поместить данные в динамическую библиотеку .Для этого вам нужно просто переделывать динамическую библиотеку каждый раз, когда вы изменяете данные и снова запускаете свой исполняемый файл без необходимости его сборки.Конечно, подпись _binary_bin_data_start и _binary_bin_data_end не должна изменяться и оставаться char[]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...