首页
社区
课程
招聘
[原创]任意文件转obj/lib的小工具(附源码)
发表于: 2016-12-30 23:51 8279

[原创]任意文件转obj/lib的小工具(附源码)

2016-12-30 23:51
8279

很久没有来逛了,从论坛下载了不少各位大侠的作品,但大多成了收藏品,还是非常感谢各位网友!
    分享一个小工具吧,它没有什么大用,主要用来打包,可以把任意文件转换成obj/lib,方便在程序中引用。
为什么要这样呢?原因很简单:
     1)如果你作为resource导入工程当然可以,但别人用……比如VC,open as resource就看见了,另存为就完整的抓到了。7zip提取资源也很easy。可能你不介意这个。
     2)你自己要用的时候要FindResource()/LoadResource(),大概勤劳的你也不介意。
     3)你可以压缩文件减小尺寸,加密文件以防字符串查找什么的。大家可以自由发挥,虽然我没提供这类功能。当然,作为资源也可以这样做。
用法:
在命令行下运行
    cvmk 文件列表
得到libbin.h/.lib,链接到你的工程里面即可。文件列表可以是单个文件,也支持通配符*/?。
    由于我比较懒,批处理命令最多只接受9个参数,对于聪明的你应该够用了。比如你要转换一堆DLL,放到A:\binary目录下,在A:\binary目录下执行 cvmk *.dll,只用了一个参数。
   用的地方
       #include "libbin.h"
       #pragma comment(lib,"libbin.lib")
    假设源文件是abc.dll,libbin.h里面会定义ORG_SIZEOF_ABC_DLL为源文件的字节数,extern unsigned char  abc_dll[],这个数组就是源文件的内容。注意:这个声明不要改,这样声明最简洁,不信你改别的样式试试。
    已知缺陷:基本文件名相同,扩展名不同的多个文件不能转,原因是转换时简单地去掉了扩展名,只产生一个.obj。
    最后说明一下,里面附带的工具是VC6的,源码只有区区4KB。你可以做一些改动以适合你的需要。比如数据段名不叫.rdata,或者包含共享属性,或者可执行,或者其他的CPU架构,诸如此类。
     祝各位网友新年快乐!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 783
活跃值: (1171)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
2
我曹  新年干货啊。。    用处很大。。
2016-12-31 00:53
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
路过······
2016-12-31 01:17
0
雪    币: 1276
活跃值: (4347)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
4
先收藏一份  感谢
2016-12-31 09:40
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
直接转成源码也行
2016-12-31 13:04
0
雪    币: 353
活跃值: (57)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
6
转成源码数组要重新编译,文件太大的话会把编译器挂调。
2016-12-31 14:22
0
雪    币: 353
活跃值: (57)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
转成数组源码需要编译,文件大需要调整编译器的堆栈大小才能编译,文件太大就把编译器整挂了。
2016-12-31 14:24
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
文件大到这样的程度就不要放PE了,直接仍结尾
2016-12-31 14:56
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
VS 2015 编译不通过
2016-12-31 17:08
0
雪    币: 465
活跃值: (398)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢楼主的分析。
2016-12-31 19:48
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
2017-3-4 06:45
0
雪    币: 288
活跃值: (279)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
不错的思路
2017-3-4 11:39
0
雪    币: 387
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mark
2017-3-4 16:09
0
雪    币: 20
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
DoItFreely 转成数组源码需要编译,文件大需要调整编译器的堆栈大小才能编译,文件太大就把编译器整挂了。
测试转换  abc.dll  为lib后,  使用时编译出错:  无法解析的外部符号  "unsigned  char  *  abc_dll"  (?abc_dll@@3PAEA)   
声明改成  extern "C" unsigned char abc_dll[]; 编译通过
最后于 2018-3-11 23:40 被wx_咖啡_552099编辑 ,原因:
2018-3-11 23:39
0
游客
登录 | 注册 方可回帖
返回
//