CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能

前言

1、capl里调用封装好的dll;
2、capl里编写安全算法;
3、用CDD的诊断功能来调用dll;
4、利用节点调用dll实现UDS_TP/NM(OSEK/Autosar);

一、如何封装capl调用的dll解锁

(1)生成dll的工程模板在我们安装CANoe时就自动生成了,以Win 7系统、9.0版本的CANoe为例,该工程路径如下:
C:\Users\Public\Documents\Vector\CANoe\9.0\CANoe Sample Configurations\Programming\CAPLdll\VS 2005 Project(参考)
(2)打开.sln工程,将自己想要被调用的接口函数的定义及声明写入到”capldll.cpp”这个文件中
(3)找到CAPL_DLL_INFO4,了解参数作用,如下:

typedef struct CAPL_DLL_INFO4{
  char              cdlName[MAX_CDL_NAME2];        // 在CAPL中调用时显示的函数名
  CAPL_FARCALL      adr;                           // 函数地址,即vs工程中函数定义时的函数名
  const char*       categoryName;                  // 函数在CAPL中的所属目录,可以用于对函数的分类
  const char*       hintText;                      // 对该函数功能的描述介绍(在CAPL中显示)
  char              resultType;                    // 函数的返回值类型,用CAPL中的类型的首字母大写去表示
  int               parCount;                      // 函数的参数个数
  char              parTypes[MAXCAPLFUNCPARS_8_1]; // 函数的参数类型,用CAPL中的类型的首字母大写去表示
  unsigned char     array[MAXCAPLFUNCPARS_8_1];    // 函数的参数是否是数组:\001表示是数组;\000表示不是数组。默认则为\000
  const char*       parNames[MAXCAPLFUNCPARS_8_1]; // 函数显示的参数名(在CAPL中的声明介绍时)
} CAPL_DLL_INFO4;

(4)如下例子,输入seed种子,输出pwd密钥,然后把函数名写在CAPL_DLL_INFO4 table[]里:

#define COC(value,bits) ((value>>bits)|(value << (sizeof(value)*8-bits)))
unsigned long CAPLEXPORT far CAPLPASCAL Key4(unsigned long seed)
{
    unsigned long pwd = 0;
    unsigned long tmpseed = seed;
    unsigned short tmpseed_H = 0;
    unsigned short tmpseed_L = 0;
    tmpseed_H = (unsigned short)(tmpseed & 0xff00) >> 8;
    tmpseed_L = (unsigned short)(tmpseed & 0x00ff);
    if (tmpseed != 0)
    {
        pwd =  (COC(COC(COC((tmpseed + 0xFFFFEF71), 1), 1), 1)) ^ (tmpseed_H * tmpseed_L);
    }
    else
    {
        pwd = 0;
    }
    return pwd;
}

CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第1张图片(5)返回值看canoe help讲解。按照上图我给的例子写,是没问题的。
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第2张图片
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第3张图片
(6)最后生成解决方案,获得.dll文件,至此capl调用的.dll文件封装好,把它放到要调用的路径里。
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第4张图片
(7)capl里用#pragma library(“\Exec32\capldll.dll”)调用,右边直接拖过来用即可。
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第5张图片
(8)若不用capl调用,也可在CANoe Options里调用。
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第6张图片

二、如何用capl写安全算法解锁(capl基础编程)

(1)以16位密钥为例如下图:
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第7张图片
(2)关键字声明如下图,把c算法函数拷贝过来,改变一下关键字即可,若算法函数包含宏运算的,建议用第一种方法。
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第8张图片

三、CDD加载dll解锁

(1)打开如下图路径.cpp可生成CDD用的.dll文件
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第9张图片
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第10张图片
(2)打开如下路径CDD用的路径demo可看到加载的.dll文件就是安全算法
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第11张图片(4)打开Diagnostics里诊断功能
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第12张图片
(5)打开Diagnostic Console,10 03 ->27 01->27 02即可解锁。
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第13张图片

四、调用DLL实现UDS_TP/NM功能

(1)以OSEK NM为例,先打开如下路径OSEK的Demo
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第14张图片
(2)可以看到A节点调用的.dll文件
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第15张图片
(3)脚本运用,可以根据下图help的描述选择你的需求函数。
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第16张图片
CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能_第17张图片

原文链接:https://blog.csdn.net/qq_36407982/article/details/112951332

你可能感兴趣的:(汽车)