c代码保护方法---均实践有效

虽然现在互联网越来越崇尚开源,但是毕竟商业公司要赚钱还是要有其可信竞争力的。Google也不是所有代码都开源在GitHub上,要不然百度还能这么不给力么。
尤其对于创业公司,代码保护是慢慢发展路上必须面对的事情。
以下两种方式均是我实践过并且一直在使用的,原理相同,即把源文件.c编译为目标文件.obj/.o,将目标文件公开。

一、lib库

之前试过封装库的方式,即再建立一个Library的工程(IDE在新建或设置中可以选择Application或Library),把需要保护的代码,包括c文件、h文件,以及外部引用的h文件,都添加进来,没有main.c,编译成功后会输出.a或.lib文件;
然后在应用程序的功能内包含该库文件和h文件,编译即可。

这种方法的好处是可以很多c文件一起编译,只要代码内的函数都能通过h文件找到声明,编译成功,那么会输出一个库文件;
问题是过程麻烦,需要单独建立Lib工程,适合多文件封装的情况,但是不够灵活。

实际上lib就是obj文件的集合

二、obj文件

下面的方式比较灵活,就是直接将源代码编译后生成的.o目标文件替换掉.c文件,但是需要在工程设置中添加该.o文件名和路径,方法和lib相同,如下图:
这里写图片描述
这里写图片描述

需要特别注意的是:
.o文件的位置和原有的lib文件的位置,一定是上层代码的顺序在上,即被包含的下层代码在下,否则会出现无法索引到外部函数的错误。

下面在浅述一下原理,c编译obj的过程是将c函数编译为机器语言,由编译器(Compiler)实现,然后多个目标文件在连接成一个.elf或.s,由连接器(Linker)实现。因为obj是机器语言,所以可以起到保护的作用(别提反编译)。
另外多说一句,目标文件中的外部函数是以相对地址的形式(可以认为是函数名)保存,只有在连接时才会最终变成固定地址。因此可以定义好一个软件架构和各个模型的接口,开放给其他人,只有接口函数名对的上就可以使用该obj进行连接、下载、测试等。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值