从objcopy说开去

7140阅读 0评论2017-06-18 CUTianrui007
分类:LINUX

2017618 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都可以生成这样的文件。

       

        学习,可以限制太死,要活学活用。

 



上一篇:《冒号课堂》学习笔记
下一篇:文件系统笔记1