免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 千江有月

嵌入html文本文件到可执行文件本身 [复制链接]

论坛徽章:
0
发表于 2009-12-27 12:23 |显示全部楼层
没必要那么复杂,Linux内核是自解压的,可以借鉴。

论坛徽章:
0
发表于 2009-12-27 12:36 |显示全部楼层
char* html_buf="<html>??XX**.....</html>";

论坛徽章:
0
发表于 2009-12-27 13:52 |显示全部楼层

回复 #9 OwnWaterloo 的帖子

ownloopwater  大侠, 你这个整的好复杂啊, 让我想起了.lds连接脚本, 使用这个技巧确实可以搞定......

不过这个小东西, 我是这样搞定了  

// 文件转为数组
unsigned char data[208] = {
        0x20, 0x4D, 0x72, 0x20, 0x5A, 0x20, 0x20, 0x31, 0x30, 0x3A, 0x30, 0x38, 0x3A, 0x35, 0x31, 0x0A,

//读取
                FILE *fp = fopen("file_name", "wb";
                fwrite(data, sizeof(data), 1, fp);
                fclose(fp);

我这样整太没技术含量了


论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-12-27 15:00 |显示全部楼层

回复 #13 千江有月 的帖子

嗯, 这方法好!

objcopy是将资源转换为object格式, 然后参与链接;
你这个方法是将资源转化为C/C++源代码代码格式, 然后参与编译链接 —— 这算是meta programming了吧

元编程的工具……   也可以做到平台无关的,  很好很好



不知道群雄逐鹿是不是这个意思:
原帖由 群雄逐鹿中原 于 2009-12-27 00:34 发表
od -An -v -tx1 | sed 's/.\(..\)/0x\1,/g'

看不懂 ……

论坛徽章:
0
发表于 2009-12-27 15:31 |显示全部楼层
你娘了个逼地,人家说是定义全局变量,你妈了逼地说成声明全局变量,你长眼睛吃屎的!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-12-27 15:37 |显示全部楼层

回复 #15 unistd 的帖子

原帖由 unistd 于 2009-12-27 15:31 发表
你娘了个逼地,人家说是定义全局变量,你妈了逼地说成声明全局变量,你长眼睛吃屎的!


原帖由 unistd 于 2009-12-25 20:14 发表
今天遇见一个问题:
能不能在一个头文件中定义一个全局变量,然后在各个.c文件中包含此头文件?


果然是大神   头文件里定义符号, 还打算让其他翻译单元包含, 不服不行



解决方法对你来说不是太简单了???
原帖由 unistd 于 2009-12-19 20:34 发表
a和b仅仅是在编码、编译阶段的一个符号,在最终的可执行代码中是不存在的。
把组sizeof之后得到数组的大小,只能说是C语言的一个特殊规定而已,我要是设计C语言的话,就不会做这个特殊规定,所有符号、指针,一律返回该平台地址空间的字节大小


大神自己设计一个C语言, 再写一个C编译器, 如何
大神爱怎么玩, 就怎么玩, 凡人不可及也

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-12-27 16:55 |显示全部楼层

回复 #14 OwnWaterloo 的帖子

转成头文件, 然后作为数组include在c代码里, objcopy的效果类似
$ cat file.txt
1234567890abcdefghijklmnopqrstuvwxyz

$ cat file.txt | od -An -v -tx1 | sed 's/.\(..\)/0x\1,/g' > file.txt.h

$ cat file.txt.h
0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x61,0x62,0x63,0x64,0x65,0x66,
0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,
0x77,0x78,0x79,0x7a,0x20,0x0a,


ARM有个INCBIN 可以在asm中直接include二进制文件,
C语言使用extern直接访问INCBIN指定的变量即可。
通用的C直接include二进制文件,我相信没这样的办法。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-12-27 17:00 |显示全部楼层
还有 cat a.out bin.dat > a_new.out

open( argv[1], O_RDONLY|O_BINARY ), 分析elf文件结尾,结尾后面的部分就是bin.dat

貌似很多windows安装程序就用类似的办法,只要用copy /b就能加入资源。

感觉这方法实在不爽

论坛徽章:
0
发表于 2009-12-27 17:35 |显示全部楼层
原帖由 千江有月 于 2009-12-27 00:08 发表
各路大侠, 最近有一个小需求, 一个可执行文件运行时需要附带几个html文件

我想能不能把这几个 html文本文件"嵌入"到可执行文件本身, 运行的时候提取到 /tmp 就好

我试过把html文本文件弄成字符串, 但是由 ...



你的需求就没有描述清楚

论坛徽章:
0
发表于 2009-12-28 10:46 |显示全部楼层
13L的方法是最好的,移植性好而且效率高,安全,占用的内存也最少,无论是HTML乃至可执行文件,本质就是一堆二进制数而已,你就把它当成FILE去读就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP