如何把一个算法函数编译成一个二进制数组,进行调用?

2019-12-28 17:50发布

纯技术讨论,不用lib方式,如何把一个算法函数编译成一个二进制数组,然后再工程中进行调用?  为了算法保密。 lib文件,这样太明显了。
15条回答
XA144F
1楼 · 2019-12-29 09:38.采纳回答
把这函数的bin提取出来,经过aes加密后放在特定位置,每次使用时解密放在ram中,用函数指针进行调用。
lgg88
2楼-- · 2019-12-28 18:36
bin 文件可以反汇编嘛  也不保密
fbwcpu
3楼-- · 2019-12-28 20:36
这个不是问题。。。。。反汇编ASM  也是很难滴读懂的。主要是可以实现把一个算法函数编译成一个二进制数组,进行调用吗?
wye11083
4楼-- · 2019-12-29 02:22
 精彩回答 2  元偷偷看……
KongQuan
5楼-- · 2019-12-29 07:28
那就把函数先固定位置,生成bin后。把这函数的bin提取出来, 然后,再建一个项目, 这这段bin做成数据数据放到固定位置, 然后,通过函数指针调用。
gamethink
6楼-- · 2019-12-29 12:21
如果是单片机,感觉很难做哦。以下是我的想法,没试过,只是想法。
首先你得独立将算法抽出来,用一个单独工程并汇编写好,并且固定好里面使用的内存空间,在入口PUSH,出口POP保护好所有的环境,然后还得想好返回的东西放在什么地址,要固定下来,不要让编译器占用,具体怎么做我忘记了,很久很久以前试过。然后将这块东西编译。(可能用C语言也可以实现?)
然后编译完找出那一块代码的二进制数据,因为刚才编译出来肯定用的是一个完整工程,通常会有启动代码,也许自己写的,也许编译器自带的,所以要避开这部分,找出编译好的那一块东西对应的二进制数值,然后放在程序空间。要注意大端小端的问题。然后将程序指针手工移动到那块数据然后执行。

估计这样做也会遇到很多困难,例如编译错误什么的,程序崩溃什么的,需要尝试下
XA144F
7楼-- · 2019-12-29 15:03
7楼搞的这么麻烦?如果是mdk,编译完成后打开map或list文件就能轻易找到相关函数的地址和占用的容量,到时候在bin里找到那个位置复制出多少字节不就ok了?

一周热门 更多>