Chinaunix首页 | 论坛 | 博客
  • 博客访问: 399388
  • 博文数量: 57
  • 博客积分: 193
  • 博客等级: 入伍新兵
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-13 14:37
个人简介

当以艺术眼光看程序,寻找程序后面的原理,做到化而不忘

文章分类

全部博文(57)

文章存档

2017年(5)

2015年(7)

2014年(27)

2013年(18)

我的朋友

分类: LINUX

2017-06-18 22:32:42

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

       

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

 



阅读(7021) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~