在ICCAVR中通过使用库函数来避免直接看到敏感算法源码
2010-04-26 15:54
267 查看
silentmj原创文章,转载请保留署名,谢谢。
下载本文示例工程
在ICCAVR环境中,我们可以通过使用ilibw.exe工具来制作我们自己的函数库(需要是注册版的才行),详细的操作方法可以参见:ICCAVR所带帮助文档中TOOL REFRENCES部分Librarian一节。
每次都需要到命令行方式下输入好几个命令未免不太方便,好在新的7.22版本中已经可以直接在IDE中完成整个操作了。下面就以7.22版为例说明详细的操作过程:
1)库工程(AVRLib)
1.1)库工程的内容
库工程包括2个文件lib.c和lib.h,其中lib.c文件的内容:
1.2)库文件的生成
只要在编译器设置中将Project Type选为Library即可生成库文件。如果再选中
Copy output to default LIB directory
那么生成库文件之后ICCAVR IDE会自动将生成的lib文件复制到默认的LIB目录下,在笔者的机器上这个目录是
c:\iccv7avr\lib
而我们的库文件的名称则为(lib + 工程名 + .a)
libAVRLIB.a
2)使用库的工程(AVRLibUser)
2.1)使用库的工程的内容
使用库的工程,包含2个文件,main.c和lib.h,其中lib.h和上一步中内容是完全一样的,而main.c文件的内容为:
2.2)使用上一步生成的库文件
要使用库,需要依次:
a)把库安装到本机的LIB目录中,本例中是将libAVRLIB.a 复制到 c:\iccv7avr\lib 之中
b)将库文件的头文件添加到工程中,本例中是lib.h
注意:
a)显然,使用库时的编译选项需要和生成库时的设置一致。
b)使用时输入的库名称为:库文件名,除开lib和后缀名剩下的部分。例如库文件名为libAVRLIB.a,使用时则应该填入AVRLIB
3)总结
其实这种方法只能起到一定程度的保护作用,对于一个意志坚定的分析者来说仍然不是很困难。不过这样已经足够对付一般情况了,不是么?
下载本文示例工程
在ICCAVR环境中,我们可以通过使用ilibw.exe工具来制作我们自己的函数库(需要是注册版的才行),详细的操作方法可以参见:ICCAVR所带帮助文档中TOOL REFRENCES部分Librarian一节。
每次都需要到命令行方式下输入好几个命令未免不太方便,好在新的7.22版本中已经可以直接在IDE中完成整个操作了。下面就以7.22版为例说明详细的操作过程:
1)库工程(AVRLib)
1.1)库工程的内容
库工程包括2个文件lib.c和lib.h,其中lib.c文件的内容:
int Fn(int a,int b) {//我们不希望算法(a+b),被轻易的看到 return a+b; }lib.h文件的内容:[/code]
int Fn(int a,int b);
1.2)库文件的生成
只要在编译器设置中将Project Type选为Library即可生成库文件。如果再选中
Copy output to default LIB directory
那么生成库文件之后ICCAVR IDE会自动将生成的lib文件复制到默认的LIB目录下,在笔者的机器上这个目录是
c:\iccv7avr\lib
而我们的库文件的名称则为(lib + 工程名 + .a)
libAVRLIB.a
2)使用库的工程(AVRLibUser)
2.1)使用库的工程的内容
使用库的工程,包含2个文件,main.c和lib.h,其中lib.h和上一步中内容是完全一样的,而main.c文件的内容为:
#include <stdio.h> #include "lib.h" void main(void) { Fn1(1,2); }
2.2)使用上一步生成的库文件
要使用库,需要依次:
a)把库安装到本机的LIB目录中,本例中是将libAVRLIB.a 复制到 c:\iccv7avr\lib 之中
b)将库文件的头文件添加到工程中,本例中是lib.h
注意:
a)显然,使用库时的编译选项需要和生成库时的设置一致。
b)使用时输入的库名称为:库文件名,除开lib和后缀名剩下的部分。例如库文件名为libAVRLIB.a,使用时则应该填入AVRLIB
3)总结
其实这种方法只能起到一定程度的保护作用,对于一个意志坚定的分析者来说仍然不是很困难。不过这样已经足够对付一般情况了,不是么?
相关文章推荐
- 在ICCAVR中通过使用库函数来避免直接看到敏感算法源码
- Flex中不使用FelxPrintJob通过ExternalInterface直接调用JavaScript利用浏览器本身的功能进行打印
- [C/C++标准库]_[初级]_[使用算法库函数时需要注意自定义BinaryPredicate和UnaryPredicate]
- 使用Struts2-tags的include,所带参数无法通过ongl直接获取的问题
- android自定义Button,通过在XML布局文件里直接使用自定义参数
- duilib 使用图片素材或者算法给窗体增加阴影(源码和demo)
- 不支持直接到存储查询(DbSet、DbQuery、DbSqlQuery、DbRawSqlQuery)的数据绑定。应使用数据填充 DbSet (例如通过对 DbSet 调用 Load),然后绑定到本地数据
- 【新手指南】如何使用手机通过wifi直接连接打印机并打印
- spark mllib中的随机森林算法,实现源码以及使用介绍
- vc6.0项目中使用zlib库和libPng库的直接进行源码级别的编译
- 使用php通过Socket进行发信源码,支持发信认证
- NT6 HDD Installer 使用教程 - 在没有光驱U盘情况下直接通过本机硬盘重装系统 (支持Win8/Win7等)
- 尽量避免直接使用 kill -9
- 使用SIFT和RANSAC算法,完成特征点的正确匹配,并求出变换矩阵,通过变换矩阵计算出要识别物体的边界
- 农资产品送货车上使用 PDA手持机 现场销售开单 然后开单后能直接通过移动网络传回电脑(云服务器)
- linux通过wget直接下载jdk(避免用户验证)
- duilib 使用图片素材或者算法给窗体增加阴影(源码和demo)
- 在网上看到使用PHP实现常见的数据结构和算法
- Task 使用 Task以及Task.Factory都是在.Net 4引用的。Task跟Thread很类似,通过下面例子可以看到。
- 通过js只提供另存为功能【避免直接打开后,文件被占用,其他用户更新不了文件信息】(转)