xxkj2010 发表于 2024-7-17 14:56:25

ID软件算法加密必备——keil c51如何加入汇编语言

本帖最后由 xxkj2010 于 2024-7-17 14:59 编辑

使用STC芯片需要加密的时候,最实用、最方便的方法就是将ID通过软件计算存放到某个固定的地址,加密的方法大致如下:
加密的时候还需要将ID通过运算的结果写入到程序空间某个固定地址(如1000H开始的地址),那么我们就必须在源代码中将这些地址(如1000H~1006H)予以保留,并定义为FFH,而不能其他数据。这也是很重要的一步。现在问题就来了,c语言大师们说可以用 _at_来定义一个七字节的数组: u8 code __at(0x1000) xxx[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
但编译会提示错误:app\main.c(5): error C141: syntax error near '_at_'app\main.c(5): error C141: syntax error near '0x1000' 而通过百度,网上有说到,可以使用:#pragmaasm
ORG 1000H
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH
#pragma endasm
开始的时候测试,总是提示错误,但也不知道什么原因,后来可以使用了。除此之外,还可以这样:
__asm ORG 1000H
__asm DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH
不过编译前需要设置一下:


汇编语言可以加到main的下面即可:
最后说明一下,本人比菜鸟还菜,上述有不正确的地方,敬请各位大佬赐教!

DebugLab 发表于 2024-7-17 15:27:31

我这样写是可以的

DebugLab 发表于 2024-7-17 15:29:34

注意不能和中断向量冲突

如果开了某个中断,中断向量位置有自定义内容,程序可能执行某些意外的操作,如有中断函数,编译器也会报错

xxkj2010 发表于 2024-7-18 15:58:33

DebugLab 发表于 2024-7-17 15:29
注意不能和中断向量冲突

如果开了某个中断,中断向量位置有自定义内容,程序可能执行某些意外的操作,如有 ...

没错,一般应该选择在偏后的地址或空间的末端。

xxkj2010 发表于 2024-7-31 07:26:54

本帖最后由 xxkj2010 于 2024-7-31 09:45 编辑

DebugLab 发表于 2024-7-17 15:27
我这样写是可以的
还是用你这方法好,用汇编的话,有的程序运行正常,有的程序下载后不能运行,真的“智能”,哈哈!
页: [1]
查看完整版本: ID软件算法加密必备——keil c51如何加入汇编语言