二、在.net micro framework中增加LibTom加解密算法

把LibTom加入到工程后,可以顺利编译通过.通过USB下载到板子上面,开心地调用RSA算法,发现有去无回.

.net micro framework调试c/cpp代码是非常不方便的,还好牛人已经给我探索出了方法.

MDK结合JLINK在调试C/CPP Native工程

用这个调试,发现,libTom使用calloc或者malloc动态分配空间时候,竟然把BUFFER分配到Flash的地址上.....Oh My God....

在群上问了一些人,但是没有任何回复.在Netduion的论坛上面,搜索到一些相关信息.表示不建议使用动态内存.

原文章:http://forums.netduino.com/index.php?/topic/11718-garbage-collector-sd-card-stream-writer-ram/?hl=malloc#entry62045

(To pre-allocate memory for a managed function, just allocate it at the class level. We do this
a lot in our driver code. Then use that pre-allocated memory in your function. No dynamic memory allocation or GC required.)

好吧,竟然不行,就重新搞内存管理吧.但只能说理想很美好,现实很骨感.

让我们打一架吧!!!还是失败了.

找呀找呀,怎么在底层使用动态内存呢~~!!竟然发现有tinyhal.h文件中有如下代码:

extern "C" {

void* private_malloc ( size_t len             );
void  private_free   ( void*  ptr             );
void* private_realloc( void*  ptr, size_t len );

}

好吧,用他来重定义这两个函数试试.新建一个MEN.C

贴上我的代码

#include <string.h>

typedef unsigned char      BYTE;
typedef unsigned char*     PBYTE;

typedef unsigned char      UINT8;
typedef signed   char      INT8;

typedef unsigned short int UINT16;
typedef signed   short int INT16;

typedef unsigned int       UINT32;
typedef signed   int       INT32;

typedef unsigned __int64   UINT64;
typedef signed   __int64   INT64;

typedef unsigned int       size_t;

extern  void* private_malloc ( size_t len             );
extern  void  private_free   ( void*  ptr             );
extern  void* private_realloc( void*  ptr, size_t len );

void *memset(void *s, int c, size_t count)
{
	char *xs = s;
	while (count--)
		*xs++ = c;
	return s;
}

void free(void *ptr)
{
	private_free(ptr);
}

void * malloc(UINT32 size)
{
	return private_malloc(size);
}

void *calloc(size_t n, size_t size)
{
	PBYTE lp = private_malloc(n*size);
	if(lp)
	{
		memset(lp,0,n*size);
	}
	return lp;
}

void *realloc(void *ptr,UINT32 size)
{
	return private_realloc(ptr,size);
}

见证奇迹的时候......

好吧,你已经成功了....

来自:http://blog.csdn.net/lan120576664
时间: 2024-08-30 01:00:53

二、在.net micro framework中增加LibTom加解密算法的相关文章

C# 中使用 RSA加解密算法

一.什么是RSA RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制. 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的.加密算法E和解密算法D也都是公开的.虽然密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK.正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存:另一个为公开密钥

C#与java中的AES加解密互解算法

一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string val) { if (string.IsNullOrEmpty(val)) return null; #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged

Vue项目中的RSA加解密

前后端使用rsa加密: 一般是客户端初始化时访问登录服务时,服务端面动态生成一对RSA对,公钥传给客户端,客户端拿到后,用户输入密码后,点登录时用公钥加密返回给服务端,服务端用私钥解就行了 一.安装jsencrypt 1 npm i jsencrypt node_modules文件夹中出现jsencrypt 二.引入jsencrypt 在main.js中import: 1 import JsEncrypt from 'jsencrypt' 2 Vue.prototype.$jsEncrypt =

React中的AES加解密请求

引言 在我们使用React开发Web前端的时候,如果是比较大的项目和正常的项目的话,我们必然会用到加解密,之前的文章中提到.NET的一些加解密,那么,这里我就模拟一个例子: 1.后台开发API接口,但API接口需要加密请求,或者需要解密输出参数 2.前端使用React开发web调用API接口 让我们开始吧 那么针对于上述问题,我们可以使用"crypto-js"组件,具体使用方式可以去GitHub上搜索相应的组件,本文例子使用使用AES的方法进行加解密,结束上述需求 当我们引用组件后,那

加解密算法二:非对称加解密

加密和解密使用不同的密钥的一类加密算法.这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密):相反,使用密钥B加密数据得到的密文,只有密钥A可以解密.这两个密钥分别称为私钥和公钥.私钥就是你个人保留,不能公开的密钥,而公钥则是公开给加解密操作的另一方的.根据不同用途,对数据进行加密所使用的密钥也不相同(有时用公钥加密,私钥解密:有时相反用私钥加密,公钥解密).非对称加密的代表算法是RSA算法.   RSA算法是第一个既能用于数据加密也

浅谈Entity Framework中的数据加载方式

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文

在SQL SERVER中实现RSA加解密函数(第二版)

/*************************************************** 作者:herowang(让你望见影子的墙) 日期:2010.1.5 注: 转载请保留此信息 更多内容,请访问我的博客:blog.csdn.NET/herowang ****************************************************/ /* 本次修改增加了unicode的支持,但是加密后依然显示为进制数据,因为进行RSA加密后所得到的unicode编码是无

解决项目中的RSA加密解密算法的实际案例

目前项目中在2个地方用到了RSA加密算法 1.一个地方时登录的时候,前端js做了RSA加密,然后后端RSA解密 2.H5移动端的url中存在RSA加密串 但是在时间压测中,主要的问题是H5请求的url中存在RSA加密串 登录的RSA逻辑: 在压测脚本 中 这个RSA登录密码加密是可以解决的,直接将所有的密码统一成RSA的加密串就可以 但是在H5端的url中存在这个RSA加密串,那么就需要解决这个问题 那么如果需要做性能压测,这个问题必须要解决,否则一些url请求是无法模拟的 通过上述的方法,就可

Java中的AES加解密

直接上代码,Base64使用的是Java8的方法,如没有,替换即可 KEY:即密码 IV:即偏移量,可自订,十六位 加密方式:AES/CBC/PKCS5Padding,128位加密 如果想用256位和PKCS7Padding需要额外导入包 import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.Inva