CN101446905A - 编译方法及编译器 - Google Patents

编译方法及编译器 Download PDF

Info

Publication number
CN101446905A
CN101446905A CNA2008102473860A CN200810247386A CN101446905A CN 101446905 A CN101446905 A CN 101446905A CN A2008102473860 A CNA2008102473860 A CN A2008102473860A CN 200810247386 A CN200810247386 A CN 200810247386A CN 101446905 A CN101446905 A CN 101446905A
Authority
CN
China
Prior art keywords
code
safety equipment
source program
intermediate code
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008102473860A
Other languages
English (en)
Other versions
CN101446905B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Beijing Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Feitian Technologies Co Ltd filed Critical Beijing Feitian Technologies Co Ltd
Priority to CN2008102473860A priority Critical patent/CN101446905B/zh
Publication of CN101446905A publication Critical patent/CN101446905A/zh
Application granted granted Critical
Publication of CN101446905B publication Critical patent/CN101446905B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明公开了一种编译方法及编译器,涉及计算机技术领域,解决了现有技术中编译出的目标程序版权得不到较安全保护的问题。本发明编译方法包括:确定安全设备验证代码在源程序的中间代码中的插入点;在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置。本发明编译器的编译模块包括:确定单元,用于确定安全设备验证代码在源程序的中间代码中的插入点;插入单元,用于在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置。本发明实施例主要用在计算机的编程中,特别是用在各种高级语言的编译中。

Description

编译方法及编译器
技术领域
本发明涉及计算机技术领域,尤其涉及编译方法及编译器。
背景技术
编译过程是指将高级语言编写的源程序翻译成目标程序的过程,该目标程序是有计算机可识别的低级语言(汇编语言或机器语言)编写的,并且翻译得到目标程序的功能与原有的源程序功能相同。最后计算机通过执行目标程序得到处理结果。
把一个源程序翻译成目标程序的过程分为五个阶段:词法分析、语法分析、语义检查与中间代码生成、代码优化和目标代码生成。其中进行词法分析和语法分析又统称为源程序分析,若在分析过程中发现有语法错误,则给出相应的提示信息。
在实现上述编译过程中,发明人发现现有技术中至少存在如下问题:从源程序编译出目标程序后,任何一个具有机器语言处理能力的计算机都能够执行该目标程序,使得编译后的目标程序不能得到较好的版权保护;即使给目标程序设置相应的密码,由于这些密码都采用软件方式设置,造成目标程序的密码容易被破解,还是无法使编译后的目标程序得到较好的版权保护。
发明内容
本发明提供一种编译方法及编译器,使得编译后的目标程序能够得到较好的版权保护。
为达到上述目的,本发明采用如下技术方案:
一种编译方法,包括对源程序进行预处理,并将预处理后的源程序转化为中间代码;该方法还包括:
按照预先设定的规则确定安全设备验证代码在源程序的中间代码中的插入点;
在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置。
一种编译器,包括编译模块,用于对源程序进行预处理,并将预处理后的源程序转化为中间代码;该编译模块还包括:
确定单元,用于确定安全设备验证代码在源程序的中间代码中的插入点;
插入单元,用于在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置。
本发明提供的编译方法及编译器,先在源程序的中间代码中确定出安全设备验证代码的插入点,并且在将中间代码转换成汇编代码以便得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置。如此一来,在执行目标程序的过程中如果执行到其中的安全设备验证代码,就需要进行安全设备的验证,这样就能够防止目标程序被任何一台计算机执行,达到了目标程序版权保护的目的。并且,由于本发明中目标程序执行过程中是对安全设备进行验证,而安全设备是硬件形式存在的,相对于现有技术中通过软件形式设置密码而言,本发明对安全设备进行验证具有更高的安全性,使得编译后的目标程序能够得到较好的版权保护。
由于本发明在对源程序进行编译的过程中自动加入安全设备验证代码,就不需要程序员在编写源程序的过程中手动编写安全设备验证代码,在提高目标程序的版权保护有效性的同时,本发明能够减少程序员的工作量,提高程序员工作效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中编译方法的流程图;
图2为本发明实施例1中编译器的框图;
图3为本发明实施例2中编译方法的流程图;
图4为本发明实施例2中编译器的框图。
具体实施方式
本发明中的安全设备验证代码能够对安全设备进行验证,为了便于理解本发明中保护目标程序版权时采用的安全设备验证代码,下面详细介绍一下的安全设备。
安全设备是一种带有处理器和存储器的小型硬件装置,能够通过计算机的数据通讯接口与计算机连接。安全设备具有密钥生成、安全存储密钥、预置加密算法等功能,并且安全设备在进行与密钥相关的运算时完全在装置内部运行,具有抗攻击的特性,安全性较高。
安全设备一般通过USB接口与计算机相连。安全设备生产商、软件系统开发商或者最终用户可以将一些重要信息存储到安全设备中,用以保证安全性或者防止遗忘。目前,较高端的安全设备是可编程的,即可以实现在安全设备中运行预先存入其中的代码。
一般安全设备中会内置安全芯片来实现安全功能。该安全芯片除了具有通用嵌入式微控制器的各种特性外,还具有较可靠的安全性能。在设计安全设备时会针对安全性能方面在安全芯片的结构上做一些特殊处理,比如采用特定的安全内核作为安全芯片的内核,该安全内核能够支持多个拥有不同权限的状态,从而实现对硬件资源访问权限的管理。
安全设备还可以带有MMU单元(Memory Management Unit,存储器管理单元),用于实现地址映射、逻辑地址的隔离、以及物理地址的隔离,该MMU单元从体系结构上支持多应用和安全性能的设计,与安全芯片的内核所支持的不同权限一起组成一个硬件安全防火墙。
上面详细介绍了安全设备的功能,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
为了能够保证编译出的目标代码的版权得到较好的保护,本发明实施例提供一种编译方法,如图1所示,该方法包括:
101、编译过程需要对源程序进行预处理,并对预处理后的源程序进行词法分析、语法分析和语义分析,然后再将源程序转化成中间代码,本实施例还需要按照预先设定的规则确定安全设备验证代码在源程序的中间代码中的插入点;
其中,上述预先设定的规则为将源程序转化成中间代码的过程中对源程序进行词法分析、语法分析和语义分析,来确定安全设备验证代码在源程序的中间代码中的插入点。
102、在确定在安全设备验证代码在源程序的中间代码中的插入点后,在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到插入点在目标程序中的对应位置,以便在执行目标程序的时候能够执行到安全设备验证代码。执行本实施例中的安全设备验证代码能够对以硬件形式存在的安全设备进行验证。
为了能够保证编译出的目标代码的版权得到较好的保护,本发明实施例还提供一种编译器,如图2所示,该编译器包括编译模块,用于对源程序进行预处理,并将预处理后的源程序转化为中间代码;为了保护目标程序版权,本实施例中的编译模块还包括:确定单元21和插入单元22。
其中,确定单元21用于确定安全设备验证代码在源程序的中间代码中的插入点;插入单元22用于在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置以便在执行目标程序的时候能够执行到安全设备验证代码。
在执行采用本实施例提供的编译方法和编译器得到的目标程序时,如果执行到目标程序中的安全设备验证代码,就需要进行安全设备的验证,这样就能够防止目标程序被任何一台计算机执行,达到了目标程序版权保护的目的。并且,由于本发明中目标程序执行过程中是对安全设备进行验证,而安全设备是硬件形式存在的,相对于现有技术中通过软件形式设置密码而言,本发明对安全设备进行验证具有更高的安全性,使得编译后的目标程序能够得到较好的版权保护。
由于本发明在对源程序进行编译的过程中自动加入安全设备验证代码,就不需要程序员在编写源程序的过程中手动编写安全设备验证代码,在提高目标程序的版权保护有效性的同时,本发明能够减少程序员的工作量,提高程序员工作效率。
实施例2:
为了更清楚地介绍本发明所采用的技术方案,下面结合采用USB Key作为安全设备的情况下的编译过程,进一步对本发明进行详细说明,但是,本发明还可以包括其他安全设备的实施例,本实施例不作为对本发明的限定。
在本实施例中,在将中间代码转化成汇编代码的过程中插入USB Key验证代码,来达到使编译后得到的目标代码受USB Key保护的目的,如图3所示,具体实现包括如下:
301、对源程序进行预处理,预处理的过程主要对源程序中所包含的头文件和预编译语句进行分析,得到预处理后的源程序。该源程序可以是C语言、C++语言等高级语言编写的源程序;
本实施例对如下源程序的具体代码做具体编译说明:
#include<stdio.h>
void test(){
      printf("i′m in test\n");
}
int main(){
     printf("hello world\n");
     test();
     return 0;
}
302、对上述预处理后的源程序进行词法分析、语法分析,并进行语义检查和生成中间代码,在生成中间代码的过程中检查源程序的代码是否有语法错误,若源程序的代码有语法错误,则执行303;若源程序的代码没有语法错误,则执行304;
由于本实施例中的源代码是C语言编写的,所以,上述过程是根据C语言中定义函数的规则对源程序进行词法分析、语法分析、以及语义检查和生成中间代码的操作;
303、退出编译过程并提示语法错误的信息;
304、继续将没有转换成中间代码的源程序转化成中间代码;
上述303和304过程共同实现了中间代码转换时的语法错误处理机制,本实施例中采用的是在遇到语法错误时直接退出编译过程,即:在执行303后不需要执行304;
在具体实现时,可以采用不同于本实施例的方案,如:在遇到语法错误时仅仅是将错误提示出来,并继续对没有转换成中间代码的源程序进行处理;这种情况下,过程303的具体执行内容是提示语法错误的信息,并且执行过程303之后还需要执行过程304。
305、由于在302中进行了词法分析、语法分析,故而可以得知到本实施例中的源程序共定义了test函数和main函数,其中main函数是源程序的入口点,并且main函数中包含有test函数,即:test函数被main函数调用了一次;
本过程中,将上述test函数被main函数调用的入口处确定为USB Key的验证代码在源程序的中间代码中的插入点;
306、在将源程序的中间代码转换成汇编代码得到目标程序的过程中,在上述确定的插入点插入USB Key的验证代码,该验证代码是汇编形式的代码,即:验证代码是由汇编语言编写而成的;
对于本实施例中的源程序而言,没有插入USB Key验证代码的情况下,得到的目标程序具体为:
.file"test.c"
    .section.rodata
.LC0:
    .string"i′m in test\n"
    .text
.glob1 test
    .type test,@function
test:;test函数入口
     push1 %ebp;寄存器ebp压栈
     mov1 %esp,%ebp;寄存器esp的值赋给ebp
     sub1 $8,%esp;为临时变量预留空间
     sub1 $12,%esp;为printf的参数分配空间
     push1 $.LC0;printf参数压栈
     call printf
     add1 $16,%esp
     leave
     ret
.Lfe1:
     .size test,.Lfe1-test
     .section.rodata
.LC1:
     .string"hello world\n"
     .text
.glob1 main
     .typemain,@function
main:;main函数入口
     push1 %ebp;寄存器ebp压栈
     mov1 %esp,%ebp;寄存器esp的值赋给ebp
     sub1 $8,%esp;为临时变量预留空间
     and1 $-16,%esp;保证栈16字节对齐
     sub1 $12,%esp;为printf的参数分配空间
     push1 $.LC1;printf参数压栈
     call printf调用printf函数
     add1 $16,%esp
     call test
     mov1 $0,%eax
     1eave
     ret
.Lfe2:
     .size main,.Lfe2-main
     .ident"MYGCC"
本过程中需要在main函数和test函数入口处插入USB Key的验证代码,由于一般函数的入口处都设置寄存器的指令,这些设置寄存器的指令与函数参数类型及数量都没有关系,非main函数的普通函数有以下三条指令:
1、push1 %ebp;寄存器ebp压栈
2、mov1 %esp,%ebp;寄存器esp的值赋给ebp
3、sub1 $8,%esp;为临时变量预留空间
但是由于Main函数是整个程序入口,因此在Main函数入口处多一条设置寄存器的指令,即
4、and1 $-16,%esp;保证栈16字节对齐
因此USB Key的验证代码只需要插在上述几条指令之后就可以了,该验证代码具体包括如下指令:
call checke_usbkey;调用checke_usbkey函数
test1 %eax,%eax;判断checke_usbkey函数的返回值
je.L2;返回值为0,转到.L2:分支继续执行
sub1 $12,%esp;返回值不为0,说明访问usb key出错,
     push1 $-1;这行指令和下一行指令是exit函数退出程序
call exit
.L2:
在插入上述验证代码后,得到的目标程序如下:
.file"test.c"
     .section.rodata
.LC0:
     .string"i′m in test\n"
     .text
.glob1 test
     .type test,@function
test:
     push1 %ebp;寄存器ebp压栈
     mov1 %esp,%ebp;寄存器esp的值赋给ebp
     sub1 $8,%esp;为临时变量预留空间
     call checke_usbkey;调用checke_usbkey函数
     test1 %eax,%eax;判断checke_usbkey函数的返回值
     je.L2;返回值为0,转到.L2:分支继续执行
     sub1 $12,%esp;返回值不为0,调用exit函数退出程序
     push1 $-1
     call exit
.L2:
     sub1 $12,%esp;为printf的参数分配空间
     push1 $.LC0;printf参数压栈
     call printf;调用printf函数
     add1 $16,%esp
     leave
     ret
.Lfe1:
     .size test,.Lfe1-test
     .section.rodata
.LC1:
     .string"hello world\n"
     .text
.glob1 main
     .type main,@function
main:
     push1 %ebp;寄存器ebp压栈
     mov1 %esp,%ebp;寄存器esp的值赋给ebp
     sub1 $8,%esp;为临时变量预留空间
     and1 $-16,%esp;保证栈16字节对齐
     call checke_usbkey;调用checke_usbkey函数
     test1 %eax,%eax;判断checke_usbkey函数的返回值
     je.L4;返回值为0,转到.L4:分支继续执行
     sub1 $12,%esp;返回值不为0,调用exit函数退出程序
     push1 $-1
     call exit
.L4:
     sub1 $12,%esp;为printf的参数分配空间
     push1 $.LC1;printf参数压栈
     callp rintf;调用printf函数
     add1 $16,%esp
     call test
     mov1 $0,%eax
     1eave
     ret
.Lfe2:
     .size main,.Lfe2-main
     .ident"MyGCC"
307、将上述包含有USB Key的验证代码的目标代码转换成二进制代码;
308、将二进制代码与编译二进制代码要用到的USB Key库以及其他库进行链接,得到最后的可执行文件,该过程中提到的库主要包括1ibC库、checke_usbkey函数所在的库。
在上述实施例中安全设备验证代码的插入点为函数的入口处,在实际运用时,在将源程序转化成中间代码的过程中通过对源程序进行词法分析、语法分析和语义分析,还可以将目标程序的以下位置作为插入点:源程序中间代码中的函数结束处、或者中间代码中函数调用指令的前后、或者中间代码中条件转移指令的前后、或者中间代码中无条件转移指令的前后、或者中间代码中算术运算指令的前后、或者中间代码中逻辑运算指令的前后、或者中间代码中中断调用指令的前后。
只需要在上述插入点中插入了安全设备验证代码,在运行目标程序时就一定会执行到安全设备验证代码,在不能通过安全设备验证代码的情况下,退出程序,这样就可以保护本实施例中目标程序的版权。
相应的,在本实施例中,最后得到的目标程序对应的源程序可以采用如下C语言表示:
#include<stdio.h>
void test(){
       if(checke_usbkey()!=0)exit(-1);
       printf("i′m in test\n");
}
int main(){
       if(checke_usbkey()!=0)exit(-1);
       printf("hello world\n");
       test();
       return 0;
}
在运行上述可执行文件的过程中,如果执行到目标程序中的USB Key验证代码,该验证代码的具体执行过程包括:
首先需要调用check_usbkey()函数,并在调用check_usbkey()函数时检查是否能查找到USB Key,若找不到USB Key,则该check_usbkey()函数提示出错信息并退出可执行文件的运行,若找到USB Key,则该check_usbkey()函数打开该USB Key并向该USB Key发送一条命令,等到USB Key执行完该命令后,接收USB Key返回的数据,并比较USB Key返回的输出数据与期望返回的数据是否一样,若USB Key返回的输出数据与期望返回的数据不一样,则check_usbkey()返回一个退出值(可以用一个非0的值表示);若USB Key返回的输出数据与期望返回的数据相同,则check_usbkey()返回一个执行值(可以用0表示)。
所述安全设备验证代码中还包括数据处理指令,该数据处理指令在执行时,判断check_usbkey()的返回值,如果check_usbkey()的返回值是一个非0的值,则提示出错信息并退出可执行文件的运行,如果check_usbkey()的返回值是0,则继续运行该可执行文件。
为了进一步加强对目标程序版权的保护,上述验证代码中还可以包含一条将种子码作为参数传递给check_usbkey()函数的指令,该种子码是利用USB Key中的种子码算法对的USB Key的用户号进行运算得到的种子码。相应的,因此每次USB Key在运行check_usbkey()函数时,需要获得该USB Key的用户号,并以得到的用户号为种子生成一个种子码,再比较生成的种子码与作为参数传递给check_usbkey()函数种子码是否相同,若生成的种子码与作为参数传递给check_usbkey()函数种子码相同,则继续运行可执行文件,若生成的种子码与作为参数传递给check_usbkey()函数种子码不相同,则返回错误信息,并退出可执行文件的运行。
上述实施例中采用用户号来进行种子码的运算,在具体实施时,还可以采用USB Key的其他特征信息来进行种子码的运算,例如USB Key的硬件序列号等。
为了能够保证编译出的目标代码的版权得到较好的保护,本发明实施例还提供一种编译器,如图4所示,该编译器包括:编译模块41和链接模块42;其中的编译模块41用于将源程序编译成目标程序,链接接模块42用于将经过二进制转化处理后的目标程序连接到相应的库。
为了使得编译后的目标程序能够得到较好的版权保护,本实施例中的编译模块41包括预处理单元411、分析单元412、检查单元413、控制单元414、转化单元415、确定单元416和插入单元417。
其中,预处理单元411用于对源程序进行预处理;分析单元412用于对预处理后的源程序进行词法分析、语法分析;转化单元415用于将源程序转化成中间代码,检查单元413用于在将源程序转化为中间代码的过程中检查代码是否有语法错误;控制单元414用于在检查单元413检查出存在语法错误时终止编译过程和提示出错信息;转化单元415还用于将中间代码转化成汇编代码以得到目标程序;确定单元416用于在将中间代码转化成汇编代码的过程中,确定USB Key验证代码的插入点;插入单元417用于在将中间代码转化成汇编代码的过程中在确定单元416确定的插入点处插入USB Key的验证代码,并且该验证代码为汇编形式的代码。
在最后得到可执行文件以后,运行可执行文件是可以通过上述验证代码进行目标程序的版权保护。
在执行采用本实施例提供的编译方法和编译器得到的目标程序时,如果执行到目标程序中的安全设备验证代码,就需要进行安全设备的验证,这样就能够防止目标程序被任何一台计算机执行,达到了目标程序版权保护的目的。并且,由于本发明中目标程序执行过程中是对安全设备进行验证,而安全设备是硬件形式存在的,相对于现有技术中通过软件形式设置密码而言,本发明对安全设备进行验证具有更高的安全性,使得编译后的目标程序能够得到较好的版权保护。
在实施例2中主要以插入点为源程序中间代码中的函数入口处的情况进行说明,在实际运用时,上述实施例中的插入点还可以是中间代码的任意一条指令后面、或者源程序中间代码中的函数结束处,在形成目标程序后,目标程序的基本情况和实施例2中相似,只是安全设备验证代码所在的位置不同,此处不再重复形成的目标程序。
本发明实施例主要用在计算机的编程中,特别是用在各种高级语言的编译中。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (15)

1、一种编译方法,包括对源程序进行预处理,并将预处理后的源程序转化为中间代码;其特征在于,该方法还包括:
按照预先设定的规则确定安全设备验证代码在源程序的中间代码中的插入点;
在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置。
2、根据权利要求1所述的编译方法,其特征在于,所述预先设定的规则为将源程序转化为中间代码的过程中对源程序进行词法分析、语法分析,来确定安全设备验证代码在源程序的中间代码中的插入点。
3、根据权利要求1所述的编译方法,其特征在于,所述插入点为源程序中间代码中的函数入口处、或者源程序中间代码中的函数结束处、或者中间代码中函数调用指令的前后、或者中间代码中条件转移指令的前后、或者中间代码中无条件转移指令的前后、或者中间代码中算术运算指令的前后、或者中间代码中逻辑运算指令的前后、或者中间代码中中断调用指令的前后。
4、根据权利要求1所述的编译方法,其特征在于,所述安全设备验证代码为汇编形式的代码。
5、根据权利要求1所述的编译方法,其特征在于,所述安全设备验证代码中包括安全设备调用函数;
所述安全设备调用函数执行时包括:
判断是否查找到安全设备;
若没有查找到所述安全设备,则退出执行所述目标程序;
若查找到所述安全设备,则向安全设备发送操作命令,并接收安全设备执行所述操作命令所返回的数据。
6、根据权利要求5所述的编译方法,其特征在于,所述安全设备调用函数执行时还包括:
判断接收到的数据是否与预期数据相同;
若接收到的数据与预期数据不相同,则返回退出值;
所述安全设备验证代码中还包括数据处理指令,所述数据处理指令执行时包括:
判断安全设备调用函数返回值是否为退出值;
若安全设备调用函数返回值为退出值,则退出执行所述目标程序。
7、根据权利要求6所述的编译方法,其特征在于,所述安全设备调用函数执行时还包括:若接收到的数据与预期数据相同,则返回执行值;
所述数据处理指令执行时还包括:若安全设备调用函数返回值为执行值,则继续执行目标程序。
8、根据权利要求5、6或7所述的编译方法,其特征在于,所述安全设备验证代码中包括将种子码作为参数传递安全设备调用函数的参数传递指令;
所述安全设备调用函数执行时还包括:
获取安全设备的特征信息;
利用所述特征信息计算种子码;
判断计算出的种子码与所述参数传递指令传递过来的种子码是否相同;
若计算出的种子码与所述参数传递指令传递过来的种子码不相同,则退出执行所述目标程序。
9、根据权利要求7所述的编译方法,其特征在于,所述特征信息为安全设备的用户号或者硬件序列。
10、一种编译器,包括编译模块,用于对源程序进行预处理,并将预处理后的源程序转化为中间代码;其特征在于,该编译模块还包括:
确定单元,用于确定安全设备验证代码在源程序的中间代码中的插入点;
插入单元,用于在将源程序的中间代码转换成汇编代码得到目标程序的过程中,将安全设备验证代码插入到所述插入点在目标程序中的对应位置。
11、根据权利要求10所述的编译器,其特征在于,所述插入点为源程序中间代码中的函数入口处、或者中间代码的任意一条指令后面、或者源程序中间代码中的函数结束处。
12、根据权利要求10所述的编译器,其特征在于,所述安全设备验证代码为汇编形式的代码。
13、根据权利要求10所述的编译器,其特征在于,所述编译模块中的预处理单元用于对源程序进行预处理;所述编译模块中的分析单元用于对预处理后的源程序进行词法分析、语法分析;所述编译模块中的转化单元,用于将源程序转化成中间代码。
14、根据权利要求13所述的编译器,其特征在于,所述编译模块还包括:
检查单元,用于在将源程序转化为中间代码的过程中检查代码是否有语法错误;
控制单元,用于在检查单元检查出存在语法错误时终止编译过程和提示出错信息;
所述转化单元还用于将中间代码转化成汇编代码以得到目标程序。
15、根据权利要求14所述的编译器,其特征在于,该编译器还包括链接模块,用于将经过二进制转化处理后的目标程序连接到相应的库。
CN2008102473860A 2008-12-29 2008-12-29 编译方法 Active CN101446905B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008102473860A CN101446905B (zh) 2008-12-29 2008-12-29 编译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008102473860A CN101446905B (zh) 2008-12-29 2008-12-29 编译方法

Publications (2)

Publication Number Publication Date
CN101446905A true CN101446905A (zh) 2009-06-03
CN101446905B CN101446905B (zh) 2012-06-27

Family

ID=40742595

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008102473860A Active CN101446905B (zh) 2008-12-29 2008-12-29 编译方法

Country Status (1)

Country Link
CN (1) CN101446905B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101963916A (zh) * 2010-09-28 2011-02-02 中国科学院地质与地球物理研究所 编译处理方法及装置
CN103544415A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动平台应用软件的加固方法
CN105303104A (zh) * 2012-01-16 2016-02-03 高通股份有限公司 用以禁止返回定向编程的动态执行阻止
CN106293865A (zh) * 2016-08-09 2017-01-04 中国银行股份有限公司 计算机源代码的编译方法及装置、认证方法、装置及系统
CN107111713A (zh) * 2014-10-02 2017-08-29 微软技术许可有限责任公司 软件系统的自动验证
CN110532036A (zh) * 2019-07-26 2019-12-03 云湾科技(嘉兴)有限公司 程序验证方法、装置、计算设备及计算机存储介质
CN110825378A (zh) * 2019-09-17 2020-02-21 秦皇岛米格教育科技有限公司 基于程序积木的编程系统和控制系统
CN111858963A (zh) * 2020-07-28 2020-10-30 中国银行股份有限公司 网页客服知识抽取方法及装置
CN113656042A (zh) * 2021-08-24 2021-11-16 北京奇艺世纪科技有限公司 一种代码生成方法、装置、电子设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463579B1 (en) * 1999-02-17 2002-10-08 Intel Corporation System and method for generating recovery code
CN100465853C (zh) * 2004-11-15 2009-03-04 南京大学 基于程序内部行为监控的软件安全保障的方法
JP2006338616A (ja) * 2005-06-06 2006-12-14 Matsushita Electric Ind Co Ltd コンパイラ装置
CN1897005A (zh) * 2006-05-23 2007-01-17 施霖 一种用于防止软件运行在非授权计算机上的保护装置
CN101136699B (zh) * 2006-09-01 2011-10-26 中兴通讯股份有限公司 可插拔光模块的自动识别方法及加密方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101963916A (zh) * 2010-09-28 2011-02-02 中国科学院地质与地球物理研究所 编译处理方法及装置
CN105303104A (zh) * 2012-01-16 2016-02-03 高通股份有限公司 用以禁止返回定向编程的动态执行阻止
CN103544415A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动平台应用软件的加固方法
CN107111713A (zh) * 2014-10-02 2017-08-29 微软技术许可有限责任公司 软件系统的自动验证
CN106293865A (zh) * 2016-08-09 2017-01-04 中国银行股份有限公司 计算机源代码的编译方法及装置、认证方法、装置及系统
CN106293865B (zh) * 2016-08-09 2019-05-31 中国银行股份有限公司 计算机源代码的编译方法及装置、认证方法、装置及系统
CN110532036A (zh) * 2019-07-26 2019-12-03 云湾科技(嘉兴)有限公司 程序验证方法、装置、计算设备及计算机存储介质
CN110825378A (zh) * 2019-09-17 2020-02-21 秦皇岛米格教育科技有限公司 基于程序积木的编程系统和控制系统
CN111858963A (zh) * 2020-07-28 2020-10-30 中国银行股份有限公司 网页客服知识抽取方法及装置
CN111858963B (zh) * 2020-07-28 2024-02-23 中国银行股份有限公司 网页客服知识抽取方法及装置
CN113656042A (zh) * 2021-08-24 2021-11-16 北京奇艺世纪科技有限公司 一种代码生成方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN101446905B (zh) 2012-06-27

Similar Documents

Publication Publication Date Title
CN101446905B (zh) 编译方法
Grech et al. Madmax: Surviving out-of-gas conditions in ethereum smart contracts
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
US9715593B2 (en) Software vulnerabilities detection system and methods
US20230057419A1 (en) System and method for compiling high-level language code into a script executable on a blockchain platform
CN109523383B (zh) 一种智能合约转换系统及方法
CN101533454B (zh) 编译方法
CN111859388B (zh) 一种多层次混合的漏洞自动挖掘方法
US20200201838A1 (en) Middleware to automatically verify smart contracts on blockchains
CN113497809B (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
Wang et al. WANA: Symbolic execution of wasm bytecode for cross-platform smart contract vulnerability detection
Alkhalifah et al. A mechanism to detect and prevent Ethereum blockchain smart contract reentrancy attacks
Liao et al. Smartdagger: a bytecode-based static analysis approach for detecting cross-contract vulnerability
Schneidewind et al. The good, the bad and the ugly: Pitfalls and best practices in automated sound static analysis of ethereum smart contracts
Fang et al. Beyond “Protected” and “Private”: An Empirical Security Analysis of Custom Function Modifiers in Smart Contracts
CN116484439B (zh) 基于Rust语言的安全性增强模型开发方法及系统
CN116149671B (zh) 用于翻译智能合约语言的方法和装置、电子设备
Zhang et al. Acfix: Guiding llms with mined common rbac practices for context-aware repair of access control vulnerabilities in smart contracts
US8423974B2 (en) System and method for call replacement
Li et al. SafePay on Ethereum: A framework for detecting unfair payments in smart contracts
CN102930203B (zh) 一种轻量级JavaScript沙箱的实现方法
CN104680043A (zh) 一种可执行文件的保护方法及装置
CN112016095B (zh) 一种验证漏洞的方法、装置和电子设备
KR20190105774A (ko) 스마트 계약 언어에서 함수 호출의 안전성 향상 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 17th floor, building B, Huizhi building, No.9, Xueqing Road, Haidian District, Beijing 100085

Patentee after: Feitian Technologies Co.,Ltd.

Country or region after: China

Address before: 100085 17th floor, block B, Huizhi building, No.9 Xueqing Road, Haidian District, Beijing

Patentee before: Feitian Technologies Co.,Ltd.

Country or region before: China