2017年6月18日 22:30:47
Objcopy 与其说是一个转换工具,不如说其是一个简易的编译器。可以这样理解,
如果想把一个图片,嵌入到程序中,那么怎么做?使用WinHex得到图片所有字节,然后将
其拷贝到代码中,编译,搞定。很规矩,很原始。写程序要有黑客精神,要能找到其本质。
这里objCopy可以理解为一个编译器,它的输入可以是任何东西,虽然我们认识的编译输入都是代码,但是这个工具扩展的编译的概念,它可以将任何文件编译成.o。注意:这个活以前是编译器做的,现在好了,有了捷径了。同时,它能输出一些变量,这个更是有良心了,更加像一个编译器了。
其用法如下:
Objcopy –I binary –O elf32-i386 –B i386 foo.jpg foo.o
将foo.jpg转化为一个.o文件,同时,导出如下变量:
Extern char _binary_foo_jpg_start[];
Extern char _binary_foo_jpg_end[];
Extern char _binary_foo_jpg_size[];
工具说完了,但是好像还没有说透。写程序的本质是把代码变化.o,然后生成可执行文件,那么有了.o,就可以进行链接了。.o的来源,一般都是认为编译器的输出,那么除了编译器,还有其它东西可以输出.o文件吗?objcopy算是一个。根据.o的文件格式自己手动写一个也可以啊。这个就像Java的.class文件,可不只是Java可生成的,只要符合.class文件格式,任何一个语言,比如Python都可以生成这样的文件。
学习,可以限制太死,要活学活用。