Boş bir xlsx dosyasına bir dış bağımlılık içeren bir C++ program var. bu bağımlılığı kaldırmak için kullanıyorum, bunu doğrudan bağlama açısından bir ikili nesneye bu dosyayı dönüştürülen: objdump kullanmald veri dosyası veri boyutunu yapar bir * ABS * ve bir tam sayı değil
objcopy --rename-section .data=.rodata,alloc,load,readonly,data,contents template.o template.o
tarafından
ld -r -b binary -o template.o template.xlsx
takip, ben üç değişken ilan görebilirsiniz:
$ objdump -x template.o
template.o: file format elf64-x86-64
template.o
architecture: i386:x86-64, flags 0x00000010:
HAS_SYMS
start address 0x0000000000000000
Sections:
Idx Name Size VMA LMA File off Algn
0 .rodata 00000fd1 0000000000000000 0000000000000000 00000040 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
SYMBOL TABLE:
0000000000000000 l d .rodata 0000000000000000 .rodata
0000000000000fd1 g *ABS* 0000000000000000 _binary_template_xlsx_size
0000000000000000 g .rodata 0000000000000000 _binary_template_xlsx_start
0000000000000fd1 g .rodata 0000000000000000 _binary_template_xlsx_end
Daha sonra bu veriler hakkında programımı anlatmak
:
template.h:
#ifndef TEMPLATE_H
#define TEMPLATE_H
#include <cstddef>
extern "C" {
extern const char _binary_template_xlsx_start[];
extern const char _binary_template_xlsx_end[];
extern const int _binary_template_xlsx_size;
}
#endif
Bu derler ve (ı cmake ile otomatik hale bazı sorun yaşıyorum rağmen, buraya bakın: compile and add object file from binary with cmake), ince bağlar benim kodunda _binary_template_xlsx_size kullandığınızda, bir adresine bir işareti olarak yorumlanır, ancak
o mevcut değil. Yani benim verilerin boyutunu almak için, ben
Bazı araştırmalar objdump içinde *ABS*
yukarıdaki "mutlak değerini" anlamına ama neden alamadım söylüyor (int)&_binary_template_xlsx_size
(veya (int)(_binary_template_xlsx_end - _binary_template_xlsx_start)
) geçmek zorunda. Değişkenini int ve işaretçi olarak görmek için C++ (veya c) programımı nasıl alabilirim?
bunu önlemek için neden ve nasıl olarak belgelerinde bazı ipuçları olabilir düşünüyorum: bir
int
olarak kullandığınızdan emin, bir makro kullanabilirsiniz. Neden dosyayı bir includable dizi tanımına dönüştürmek için basit bir betik yazmıyoruz? –Dosya xlsx dosyasıdır: sıkıştırılmış xml dosyaları topluluğu. Bunu yapmamın sebebi, kodun bir kısmını unziplemek, dosyalar arasında yinelemek ve xml'yi ayrıştırmak için harcadığım ve tüm bunları yeniden yapmak istemediğim için oldu. Ayrıca bu eğlenceli. –
Ayrıca verilere çok iyi erişebiliyorum. Bu davranıştan etkilendiğim için burada neler olup bittiğini öğrenmeye çalışıyorum. –