欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

編譯方法以及編譯器的制作方法

文檔序號:6484287閱讀:208來源:國知局
專利名稱:編譯方法以及編譯器的制作方法
技術領域
本發(fā)明涉及計算機技術領域,尤其涉及一種編譯方法以及編譯器。
技術背景智能密鑰設備是一種帶有處理器和存儲器的小型硬件裝置,它通過計算機 的數(shù)據(jù)通訊接口與主才幾連接。它具有密鑰生成、安全存^f渚密鑰、預置加密算法 等功能。智能密鑰設備與密鑰相關的運算完全在裝置內部運行,并且具有抗攻 擊的特性,安全性極高。智能密鑰設備生產(chǎn)商、軟件系統(tǒng)開發(fā)商或者最終用戶 可以將一些重要信息存儲到智能密鑰設備中,用以保證信息安全性或者防止遺忘o目前,較高端的智能密鑰設備是可編程的,即可以在智能密鑰設備中運行 預先存入其中的程序代碼。智能密鑰設備將預先存入其中的程序代碼進行編譯, 編譯后在計算機上執(zhí)行編譯后的程序代碼得到處理結果。其中,編譯過程是指 將高級語言編寫的源程序翻譯成目標程序的過程。該目標程序是由計算機可執(zhí)行的指令構成,并且功能與源程序的功能相同。編譯過程分為5個階段詞法 分析、語法分析、語義檢查與中間代碼的生成、代碼優(yōu)化和目標代碼生成。在實現(xiàn)上述編譯過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術中至少存在如下問題從源 程序編譯出目標程序后,任何一個具有機器語言處理能力的計算機都能夠執(zhí)行該目標程序,使得編譯后的目標程序不能得到較好的版權保護;并且現(xiàn)有的版 權保護方法也特別復雜,需要用戶手動地將驗證智能密鑰設備的代碼加到源程 序中,并且還需要用戶學習如何使用智能密鑰設備。發(fā)明內容本發(fā)明的實施例提供一種編譯方法以及編譯器,用來簡化、降低現(xiàn)有技術 中版權保護的復雜度與難度。為達到上述目的,本發(fā)明的實施例釆用如下技術方案一種編譯方法,包括對源程序代碼進行預處理;并對預處理后的源程序代碼進行詞法分析和語法分析;該方法還包括按照預先設定的規(guī)則確定驗證代碼在源程序代碼中的插入點; 將所述驗證代碼插入到所述插入點在源程序代碼中的對應位置; 將包含插入了驗證代碼的源程序代碼轉換成目標程序代碼。 一種編譯器,包括編譯模塊,用于對源程序代碼進行預處理,并對預處理后的源程序代碼進行詞法分析和語法分析;該編譯模塊還包括確定單元,用于按照預先設定的規(guī)則確定驗證代碼在源程序代碼中的插入占 /"、 9插入單元,用于將所述驗證代碼插入到所述插入點在源程序代碼中的對應 位置;轉換單元,用于將包含插入了驗證代碼的源程序代碼轉換成目標程序代碼。 本發(fā)明提供的編譯方法及編譯器,先在源程序代碼中確定出驗證代碼的插 入點,將驗證代碼插入到所述插入點在源程序代碼中的對應位置,并將包含插 入了驗證代碼的源程序代碼轉換成目標程序代碼。如此一來,在執(zhí)行目標程序 代碼的過程中如果執(zhí)行到其中的驗證代碼處,則要進行智能密鑰設備的驗證, 這樣就能夠防止目標程序被任何一臺計算機執(zhí)行,達到了目標程序代碼版權保 護的目的。并且,由于本發(fā)明中目標程序執(zhí)行過程中是對智能密鑰設備進行驗 證,而智能密鑰設備是硬件形式存在的,相對于現(xiàn)有技術中通過軟件形式設置密碼而言,本發(fā)明在編譯階段自動加入了訪問智能密鑰設備的代碼,使目標程 序代碼自動受到智能密鑰設備的保護,簡化、降低了版權保護的復雜度與難免。


為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施 例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述 中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付 出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例1中編譯方法的流程圖; 圖2為本發(fā)明實施例1中編譯器的框圖; 圖3為本發(fā)明實施例2中編譯方法的流程圖; 圖4為本發(fā)明實施例2中編譯器的框圖。
具體實施方式
本發(fā)明實施例中的驗證代碼能夠對智能密鑰設備進行驗證,為了便于理解 本發(fā)明中保護目標程序代碼版權時所采用的驗證代碼,下面詳細的介紹一下智 能密鑰設備。一般智能密鑰設備中會內置安全芯片來實現(xiàn)安全功能。該安全芯片除了具 有通用嵌入式微控制器的各種特性外,還具有較可靠的安全性能。在設計智能 密鑰設備時會針對安全性能方面在安全芯片的結構上做一些特殊處理,比如釆 用特定的安全內核作為安全芯片的內核,該安全內核能夠支持多個擁有不同權 限的狀態(tài),從而實現(xiàn)對硬件資源訪問權限的管理。智能密鑰設備還可以帶有MMU單元(Memory Management Unit,存儲器管理 單元),用于實現(xiàn)地址映射、邏輯地址的隔離、以及物理地址的隔離,該,U單 元從體系結構上支持多應用和安全性能的設計,與安全芯片的內核所支持的不同權限一起組成一個硬件安全防火墻。上面詳細介紹了智能密鑰設備的功能,下面將結合本發(fā)明實施例中的附 圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實 施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施 例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施 例,都屬于本發(fā)明保護的范圍。實施例1為了簡化、降低了版權保護的復雜度與難度,本發(fā)明實施例提供一種編譯方法,如圖l所示,該方法包括101、 對源程序代碼進行預處理,并對預處理后的源程序代碼進行詞法分析和語法分析;按照預先設定的規(guī)則確定驗證代碼在源程序代碼中的插入點。其中,所述驗證代碼可以是一段驗證智能密鑰設備的代碼,所述驗證代碼 還可以是一個函數(shù)調用,所述函數(shù)完成驗證所述智能密鑰設備的功能,函數(shù)可 以實現(xiàn)在一個編譯好的庫中,或者,所述函數(shù)以源代碼的形式放在源程序代碼 中;所迷確定驗證代碼在源程序代碼中的插入點的方法為根據(jù)對預處理后的源 程序代碼進行詞法分析和語法分析的結果,來確定-瞼證代碼在源程序代碼中的 插入點;所述預先設定的規(guī)則為確定源程序代碼中函數(shù)的開始位置為驗證代碼在 源程序代碼中的插入點;或者確定源程序代碼中函數(shù)的結束位置為驗證代碼在 源程序代碼中的插入點;或者確定源程序代碼中函數(shù)調用之前的位置為驗證代 碼在源程序代碼中的插入點;或者確定源程序代碼中函數(shù)調用之后的位置為驗 證代碼在源程序代碼中的插入點。102、 當確定了上述驗證代碼在源程序代碼中的插入點后,將所述驗證代碼插入到所述插入點在源程序代碼中的對應位置,以便在執(zhí)行目標程序代碼的時 候能夠執(zhí)行到上述驗^L代碼。103、當將所述驗證代碼插入到所述確定的插入點在源程序代碼中的對應位 置后,將包含驗證代碼的源程序代碼轉換成目標程序代碼,以便計算機可以執(zhí) 行所述程序,得到所述源程序代碼的運行結果;執(zhí)行本實施例中的驗證代碼能 夠對以硬件形式存在的安全設備進行驗證。為了進一步簡化、降低了版權保護的復雜度與難度,本發(fā)明實施例還提供 一種編譯器,如圖2所述,該編譯器包括編譯模塊,用于對源程序代碼進行預 處理,并對預處理后的源程序代碼進行詞法分析和語法分析;為了保護目標程 序版權,本實施例中的編譯模塊還包括確定單元21、插入單元22和轉換單元 23。確定單元21用于按照預先設定的規(guī)則確定—瞼證代碼在源程序代碼中的插入 點;插入單元22用于將所述驗證代碼插入到所述插入點在源程序代碼中的對應 位置;轉換單元23用于將包含插入了驗證代碼的源程序代碼轉換成目標程序代 碼。在執(zhí)行釆用本實施例提供的編譯方法和編譯器得到的目標程序時,如果執(zhí) 行到目標程序代碼中的驗證代碼,就需要進行智能密鑰設備的驗證,這樣就能 夠防止目標程序被任何一臺計算機執(zhí)行,達到了目標程序代碼版權保護的目的。 并且,由于本發(fā)明中目標程序執(zhí)行過程中是對智能密鑰設備進行驗證,而智能 密鑰設備是硬件形式存在的,相對于現(xiàn)有技術中通過軟件形式設置密碼而言, 本發(fā)明在編譯階段自動加入了訪問智能密鑰設備的代碼,使目標程序代碼自動 受到智能密鑰設備的保護,簡化、降低了版權保護的復雜度與難度。實施例2為了更清楚地介紹本發(fā)明所采用的技術方案,下面結合采用USB Key作為 智能密鑰設備的情況下的編譯過程,進一步對本發(fā)明進行詳細說明,但是,本 發(fā)明還可以包括其他智能密鑰設備的實施例,本實施例不作為對本發(fā)明的限定。在本實施例中,將驗證代碼插入到所述插入點在源程序代碼中的對應位置, 來達到使編譯后得到的目標程序代碼受USB Key保護的目的,如圖3所示,具 體實現(xiàn)包括如下301、 在編譯的過程中,首先需要對源程序代碼進行預處理,所述預處理的后的源程序代碼。該源程序代碼可以是C語言、0++語言等高級語言編寫的源程 序代碼。本實施例以C語言編寫的源程序代碼進行編譯來說明,所述C語言的源程 序代碼如下#include <stdio.h> void test 0 {printf("i'm in test\n";int main() {printf ("hello world\n"; test 0 ; return 0;302、 對源程序代碼進行預處理后,進一步對源程序代碼進4于詞法分析和語 法分析,在分析的過程中根據(jù)高級語言的語法規(guī)則檢測源程序代碼中是否有語ii法錯誤,若源程序代碼中有語法錯誤,則執(zhí)行步驟303;若源程序代碼中沒有語 法錯誤,則執(zhí)行步驟304。303、 提示出錯信息并終止分析預處理后的源程序代碼。304、 繼續(xù)對預處理后的源程序代碼進行詞法分析和語法分析,直到將所述 源程序代碼分析完畢。本實施例步驟303和304過程共同實現(xiàn)了分析預處理后的源程序代碼在出 現(xiàn)語法錯誤時的處理方法,本實施例中采用的是在遇到語法錯誤時直接提示出 錯信息并終止分析預處理后的源程序代碼,即在執(zhí)行步驟303后不需要執(zhí)行 步驟304;在具體實現(xiàn)時,還可以采用不同于本實施例的方案,如在遇到語法錯誤 時僅僅是將錯誤提示出來,并繼續(xù)對預處理后的源程序代碼進行分析;這種情 況下,步驟303的具體執(zhí)行內容是提示語法錯誤的信息,并且執(zhí)行步驟303之 后還需要執(zhí)行步驟304。305、 當源程序代碼的詞法分析和語法分析結束后,根據(jù)所述詞法分析和語 法分析的結果確定驗證代碼在源程序代碼中的插入點。其中,所述驗證代碼可以是一段驗證USB Key的代碼,所述驗證代碼還可 以是一個函數(shù)調用,所述函數(shù)完成驗證所述智能密鑰設備的功能,所述函數(shù)可 以實現(xiàn)在一個編譯好的庫中,或者,所述函數(shù)以源代碼的形式放在源程序代碼 中;所述詞法分析和語法分析的結果包括源程序代碼中函數(shù)的個數(shù)、函數(shù)的 位置以及函數(shù)相互之間的調用情況。本發(fā)明實施例中對步驟301中的C語言源程序代碼進行詞法和語法的分析 得到本實施例的源程序代碼中共定義了 test函數(shù)和main函數(shù),其中main函數(shù)是源程序代碼的入口點,并且main函數(shù)中包含有test函數(shù),即test函數(shù)被 main函數(shù)調用了一次。本發(fā)明實施例以test函凄W皮main函凄t調用的入口處為 USB Key的驗證代碼在源程序代碼中的插入點為例,來具體說明驗證代碼插入源 程序代碼中的過程。306、 USB Key編譯器將驗證代碼插入到test函數(shù)被main函數(shù)調用的入口處。本實施例具體以將所述驗證USB Key的代碼直接插入到所述插入點在源程 序代碼中的對應位置為例來說明; 插入的代碼具體為 并include <stdio. h> void test 0 { int ret=—lj int num=0; int fd=-l;int cmd=105; 〃某個命令char data-in[2] = {0x11, 0x22}; 〃命令需要的輸入數(shù)據(jù) char data-out [2]; 〃命令執(zhí)行后的usbkey的輸出凄t據(jù) int in_len=2; 〃輸入數(shù)據(jù)長度 int out_len=0; 〃輸出數(shù)據(jù)長度char data —expire [2] = {0x18, 0x88}; 〃期望的llr出凄史才居 num=usbkey_f ind (); 〃返回找到的usbkey個數(shù) if(num<=0) exi t (-1); 〃沒找到USB key fd=usbkey_open ();if(fd〈0) exit(-1);〃打開失敗ret=usbkey_cmd(fd, data—in, in—len, data—out, &out —len); if (ret !=0 II memcmp (data—out, data—expire, 2) !=0) {usbkey—close (fd) 5exit(-1);//執(zhí)行命令失敗usbkey—close (fd); printf("i'm in test\n");int main() {int ret=-int num=0; int fd=-l.,int couK05;〃某個命令char data—in[2] = {0x11, 0x22}; 〃命令需要的輸入數(shù)據(jù) char data—out [2]; 〃命令4丸4亍后的usbkey的東俞出凄t據(jù) int in-len=2; 〃輸入數(shù)據(jù)長度 int out_len=0; 〃輸出凄t據(jù)長度char data—expire [2] = {0xl8, 0x88}; 〃期望的輸出數(shù)據(jù)num=usbkey_f ind (); 〃返回找到的usbkey個數(shù)if (num<=0) exit (-1); //沒找到USB keyf d=usbkey—open ();if(f(KO) exit(-l);〃打開失敗ret=usbkey_cmd (fd, data_in, in_len, data—out, &out_len)5 if (ret !=0 || memcmp (data—out, data—expire, 2) !=0) {
usbkey—close (fd)5
exit (-1); 〃執(zhí)行命令失敗
usbkey—close (fd)5 printf ("hello world\n"); test (); return 0j
307、 當將所述驗證代碼插入到源程序代碼中后,USB Key編譯器將插入了 驗證代碼后的源程序代碼轉換成中間程序代碼。
308、 當將源程序代碼轉化為中間程序代碼后,所述USB Key編譯器將上述 中間程序代碼轉換成匯編代碼,再將匯編代碼轉換成二進制代碼。
309、 將二進制代碼與編譯二進制代碼要用到的USB Key庫以及其他庫進行 鏈接,得到最后的可執(zhí)行文件,該過程中提到的庫主要包括libC庫、
check—usbkey函數(shù)所在的庫。
其中,步驟306中,USBKey的編譯器將驗證代碼插入到源程序代碼中,當 上述驗證代碼是一個函數(shù)調用,且函數(shù)實現(xiàn)在一個編譯好的庫中時,則插入的 所述驗證代碼具體如下 并include <stdio.h〉
〃此處將函數(shù)check-usbkey的實現(xiàn)在一個編譯好的庫中 int check_usbkey (int a, int b , int c) {int ret--l; int num=0; int fd--lj
int cmd-105;〃某個命令
char data一in [2] = {0x11, 0x22}; 〃命令需要的輸入數(shù)據(jù) char data-out [2]; 〃命令執(zhí)行后的usbkey的輸出數(shù)據(jù) int in—len=2; 〃豐餘入凄史據(jù)長度 int out — len=0; 〃輸出數(shù)據(jù)長度
char data-expire [2] = {0x18, 0x88}; 〃期望的輸出ft據(jù) num=usbkey—f ind (); 〃返回找到的usbkey個數(shù) if(num<=0) return -1; 〃沒找到鎖 fd=usbkey_open (); if(fd<0) return -1;//打開失敗
ret=usbkey-cmd (fd, data—in, in—1 en, data—out, &out —len); if (ret !=0 I I memcmp (data—out, data—expire, 2) !=0) {
usbkey—close (fd)5
return -1; //執(zhí)行命令失敗
usbkey—close (fd) , return 0; //成功
void test 0 {
if (check-usbkey() !=0) exit(-l);
16printf("i'm in test\n");
int main() {
if (check-usbkey () !=0) exit(-l); printf ("hello worldW'); test (); return 0;
進一步地,USB Key編譯器將驗證代碼插入到源程序代碼中,當上述驗證 代碼是一個函數(shù)調用,且函數(shù)以源代碼的形式放入源程序代碼中時,則插入的 所述驗證代碼具體如下
#include <stdio.h>
〃此處將函數(shù)check-usbkey的實現(xiàn)以源代碼的形式方文入源程序代碼中, int check—usbkey (int a, int b , int c) {
int ret=-lj
int num=0;
int fd=-l;
int cmd=105; 〃某個命令
char data — in[2] = {0xll, 0x22}; 〃命令需要的輸入數(shù)據(jù) char data—out [2]; 〃命令執(zhí)4亍后的usbkey的專敘出凄t才居 int i n — 1 en=2; 〃輸入數(shù)據(jù)長度 int out —len-0;Z/輸出數(shù)據(jù)長度
char data — expire [2〗={0x18, 0x88};//期望的豐lr出凄^居num-usbkey—find (); 〃返回找到的usbkey個數(shù)
if(num<=0) return -1; 〃沒找到鎖
f d=usbkey_open ();
if(fd<0) return -1; 〃打開失敗
ret=usbkey_cmd (fd, data —in, in—len, data—out, &out_len); if (ret !=0 II memcmp (data—out, data—expire, 2) !=0) {
usbkey—close (fd) 5
return -1; 〃執(zhí)行命令失敗
usbkey—close (fd)5 return 0; //成功
void test 0 {
if (check-usbkey () !=0) exit(-l); printf (" i'm in test\n");
int main() {
if (check_usbkey () !=0) exit(-l); printf ("hello world\n"); test (h return 0j
在本實施例中,驗證代碼的插入點為函數(shù)的入口處,在實際運用時,驗證代碼的插入點可以是函數(shù)開始處、函數(shù)結尾處、函數(shù)調用前后等;只需要在上 述插入點中插入了驗證代碼,在運行目標程序代碼時就一定會執(zhí)行到驗證代 碼,在不能通過驗證代碼的情況下,目標程序代碼將退出而不能正常工作,這 樣就可以保護本實施例中目標程序代碼的版權。
在運行可執(zhí)行文件的過程中,執(zhí)行到驗證代碼的具體執(zhí)行過程包括當調 用usbkey-find ()函數(shù)后,檢測計算機是否與USB Key連接,若沒有USB Key 和執(zhí)行目標程序代碼的計算機相連接,則結束目標程序代碼的執(zhí)行;若檢測到 有USB Key和所迷執(zhí)行目標程序代碼的計算機相連,則需要打開所述USB Key, 若所述USB Key無法打開,則結束目標程序代碼的運行;若USB Key順利的打 開,還要進一步判斷USB Key返回的數(shù)據(jù)是否與預先設定的數(shù)據(jù)相同,若不相 同,則結束目標程序代碼的運行;只有所述目標程序代碼通過了所述USB Key 的驗證,才能使所述目標程序代碼在計算機上運行,得到運行結果;若USB Key 驗證過程中的任一條件不滿足,即便可以運行所述目標程序代碼的計算機也得 不到正確的源程序代碼運行結果。
在運行可執(zhí)行文件的過程中,執(zhí)行到 -險證代碼的具體執(zhí)4亍過程還可以為 在USB Key設備和計算機相連接的基礎上,直接將所述USB Key設備打開進行 該設備的驗證。若所述USBKey無法打開,則結束目標程序代碼的運行;若USB Key順利的打開,還要進一步判斷USB Key返回的數(shù)據(jù)是否與預先設定的數(shù)據(jù)相 同,若不相同,則結束目標程序代碼的運行;只有所述目標程序代碼通過了所 述USBKey的驗證,才能使所述目標程序代碼在計算機上運行,得到運行結果; 若USB Key驗證過程中的任一條件不滿足,即便可以運行所迷目標程序代碼的 計算機也得不到正確的源程序代碼運行結果。
具體地,USB Key接收到的操作命令可以為一種數(shù)據(jù)操作命令,則USB Key對數(shù)據(jù)操作命令中包含的數(shù)據(jù)進行運算,并將得到的運算結果返回。其中,運 算可以是加密運算、解密運算和其他相關的運算。
為了進一步加強對目標程序代碼版權的保護,上述驗證代碼中還可以包含
將種子碼作為參數(shù)的USB Key調用函數(shù),該種子碼是獲取的USB Key的用戶號, 當調用usbkey_cmd (fd, data —in, in—len, data—out, &out — len)時,USB Key利 用自身的種子碼算法對的USB Key的用戶號進行運算得到新的種子碼。相應的, 因此每次USB Key在運行check_usbkey ()函數(shù)時,需要獲得該USB Key的用戶 號,并以得到的用戶號為種子生成一個種子碼,再比較生成的種子碼與作為參 數(shù)傳遞給check-usbkey()函數(shù)種子碼是否相同,若生成的種子碼與作為參數(shù)傳 遞給check-usbkey()函數(shù)種子碼相同,則繼續(xù)運行可執(zhí)行文件,若生成的種子 碼與作為參數(shù)傳遞給check-usbkey()函數(shù)種子碼不相同,則返回錯誤信息,并 退出可執(zhí)行文件的運行。
上述實施例中采用用戶號來進行種子碼的運算,在具體實施時,還可以采 用USB Key的其他特征信息來進行種子碼的運算,例如USB Key的硬件序列號 等。
為了能夠保證編譯出的目標程序代碼的版權得到較好的保護,本發(fā)明實施 例還提供一種編譯器,如圖4所示,該編譯器包括編譯模塊41和鏈接模塊42。 其中編譯模塊41用于將源程序代碼編譯為目標程序代碼,鏈接模塊42用于將 經(jīng)過轉換處理得到的目標程序代碼鏈接到相應的庫,得到最后的可纟丸行文件。
為了使得編譯后的目標程序代碼能夠得到較好的版權保護,本實施例中的編 譯模塊41包括預處理單元411、分析單元412、檢測單元413、控制單元414、 確定單元415、插入單元416和轉換單元417。
其中,預處理單元411用于對源程序代碼進行預處理;分析單元412用于對
20經(jīng)過預處理單元411預處理后的源程序代碼進行詞法分析、語法分析和語義分 析;檢測單元413用于檢測源程序代碼中是否有語法錯誤;控制單元用于 在檢測單元413檢查到源程序代碼有語法錯誤時提示出錯信息并終止分析源程 序代碼;確定單元415用于根據(jù)分析單元412的結果確定源程序代碼的結構, 并且根據(jù)源程序代碼的結構確定驗證代碼的插入點;插入單元416用于將所述 驗證代碼插入到所述確定單元415在源程序代碼中確定的插入點,其中,所述 驗證代碼可以是一段-瞼證USB Key的代碼,所述-瞼證代碼還可以是一個函數(shù)調 用,所述函數(shù)完成驗證所述智能密鑰設備的功能,函數(shù)可以實現(xiàn)在一個編譯好 的庫中,或者,所述函數(shù)以源程序代碼的形式放在源程序代碼中;轉換單元417 用于將插入了驗證代碼的源程序代碼轉換成中間代碼,并且將中間代碼轉換成 匯編代碼以及將匯編代碼轉換成二進制代碼。
其中,在鏈接模塊42得到可執(zhí)行文件以后,運行可執(zhí)行文件時可以通過上 述驗證代碼進行目標程序代碼的版權保護。
在執(zhí)行采用本實施例提供的編譯方法和編譯器得到目標程序代碼時,如果 執(zhí)行到目標程序代碼中的驗證代碼,就需要進行USB Key的驗證,這樣就能夠 防止目標程序代碼被任何一臺計算機執(zhí)行,達到了目標程序代碼版權保護的目 的。并且,由于本發(fā)明中目標程序代碼執(zhí)行過程中是對USB Key進行驗證,而 USBKey是硬件形式存在的,相對于現(xiàn)有技術中通過軟件形式設置密碼而言,本 發(fā)明在編譯階段自動加入了訪問智能密鑰設備的代碼,使目標程序代碼自動受 到智能密鑰設備的保護,簡化、降低了版權保護的復雜度與難度。
在本發(fā)明實施例1中主要以插入點為源程序代碼的函數(shù)入口處的情況進行 說明,在實際運用時,上述實施例中的插入點還可以是源程序代碼的函數(shù)結束 處和函數(shù)調用的前后,在形成目標程序代碼后,目標程序代碼的基本情況和實施例l中相似,只是驗證代碼所在的位置不同,此處不再重復形成目標程序代 碼。
本發(fā)明實施例主要用在計算機的編程中,特別是用在各種高級語言的編譯中。
通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到本發(fā)
明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過硬件,但很多
情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術方案本質上或
者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟
件產(chǎn)品存儲在可讀取的存儲介質中,如計算機的軟盤,硬盤或光盤等,包括若
干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備
等)執(zhí)行本發(fā)明各個實施例所述的方法。
以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于 此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到 變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應 以所述權利要求的保護范圍為準。
權利要求
1、一種編譯方法,包括對源程序代碼進行預處理;并對預處理后的源程序代碼進行詞法分析和語法分析;其特征在于,該方法還包括按照預先設定的規(guī)則確定驗證代碼在源程序代碼中的插入點;將所述驗證代碼插入到所述插入點在源程序代碼中的對應位置;將包含插入了驗證代碼的源程序代碼轉換成目標程序代碼。
2、 根據(jù)權利要求1所述的編譯方法,其特征在于,所述驗證代碼是一段-驗 證智能密鑰設備的代碼;或者,所述驗證代碼還是一個函數(shù)調用,所述函數(shù)完 成驗證所述智能密鑰設備的功能,所述函數(shù)實現(xiàn)在一個編譯好的庫中,或者, 所述函數(shù)以源代碼的形式放在源程序代碼中。
3、 根據(jù)權利要求1所述的編譯方法,其特征在于,所述確定驗證代碼在源法分析的結果,來確定-瞼證代碼在源程序代碼中的插入點。
4、 根據(jù)權利要求l所述的編譯方法,其特征在于,所述驗證代碼為高級語 言形式的代碼。
5、 根據(jù)權利要求1所述的編譯方法,其特征在于,所述預先設定的規(guī)則為 確定源程序代碼中函數(shù)的開始位置為驗證代碼在源程序代碼中的插入點;或者確定源程序代碼中函數(shù)的結束位置為驗證代碼在源程序代碼中的插入點; 或者確定源程序代碼中函數(shù)調用之前的位置為驗證代碼在源程序代碼中的插入 點;或者確定源程序代碼中函數(shù)調用之后的位置為驗證代碼在源程序代碼中的 插入點。
6、 根據(jù)權利要求2所述的編譯方法,其特征在于,所述驗證代碼中包括智 能密鑰設備調用函數(shù),所述智能密鑰設備調用函數(shù)執(zhí)行時包括打開所述智能密鑰設備;若打開所述智能密鑰設備失敗,則退出執(zhí)行所述目標程序代碼; 若打開所述智能密鑰設備成功,則向所述智能密鑰設備發(fā)送操作命令,并 接收智能密鑰設備執(zhí)行所述操作命令所返回的數(shù)據(jù)。
7、 根據(jù)權利要求6所述的編譯方法,其特征在于,在打開所述智能密鑰設 備之前還包括判斷是否查找到智能密鑰設備;若沒有查找到所述智能密鑰設備,則退出執(zhí)行所述目標程序代碼; 所述打開所述智能密鑰設備為在查找到所述智能密鑰設備時打開所述智 能密鑰設備。
8、 根據(jù)權利要求6所述的編譯方法,其特征在于,在接收到智能密鑰設備 執(zhí)行所述操作命令所返回的數(shù)據(jù)后還包括判斷接收到的數(shù)據(jù)是否與預期數(shù)據(jù)相同;若接收到的數(shù)據(jù)與預期數(shù)據(jù)不相同,則退出執(zhí)行所述目標程序代碼; 若接收到的數(shù)據(jù)與預期數(shù)據(jù)相同,則繼續(xù)執(zhí)行目標程序代碼。
9、 根據(jù)權利要求6所述的編譯方法,其特征在于,向所述智能密鑰設備發(fā) 送的操作命令是一種數(shù)據(jù)操作命令,則所述智能密鑰設備對數(shù)據(jù)操作命令中傳 遞的的數(shù)據(jù)進行運算,并將運算后得到的數(shù)據(jù)返回。
10、 根據(jù)權利要求2所迷的編譯方法,其特征在于,所述驗證代碼中包括 將種子碼作為參數(shù)傳遞給智能密鑰設備調用函數(shù)的參數(shù)的指令;所述智能密鑰設備調用函數(shù)執(zhí)行時還包括 獲取智能密鑰設備的特征信息; 利用所述特征信息計算種子碼;判斷計算出的種子碼與所述參數(shù)傳遞指令傳遞過來的種子碼是否相同;若計算出的種子碼與所述參數(shù)傳遞指令傳遞過來的種子碼不相同,則退出 執(zhí)行所述目標程序代碼。
11、 根據(jù)權利要求10所述的編譯方法,其特征在于,所述特征信息為智能密鑰設備的用戶號或者硬件序列。
12、 權利要求1所述的編譯方法,其特征在于,將包含插入了驗證代碼的 源程序代碼轉換成目標程序代碼之后還包括將經(jīng)過轉化處理后的目標程序代 碼與編譯目標程序代碼要用到的智能密鑰設備庫以及其他庫進行鏈接,得到可 執(zhí)行文件。
13、 一種編譯器,包括編譯模塊,用于對源程序代碼進行預處理,并對預 處理后的源程序代碼進行詞法分析和語法分析;其特征在于,該編譯模塊還包 括確定單元,用于按照預先設定的規(guī)則確定驗證代碼在源程序代碼中的插入點;插入單元,用于將所述驗證代碼插入到所述插入點在源程序代碼中的對應 位置;轉換單元,用于將包含插入了驗證代碼的源程序代碼轉換成目標程序代碼。
14、 根據(jù)權利要求13所述的編譯器,其特征在于,所述驗證代碼是一段驗 證智能密鑰設備的代碼;或者,所述驗證代碼還是一個函數(shù)調用,所述函數(shù)完 成驗證所述智能密鑰設備的功能,所述函數(shù)實現(xiàn)在一個編譯好的庫中,或者, 所述函數(shù)以源代碼的形式放在源程序代碼中。
15、 根據(jù)權利要求13所述的編譯器,其特征在于,所述確定驗證代碼在源 程序代碼中的插入點的方法為根據(jù)對預 法分析的結果,來確定驗證代碼在源程序代碼中的插入點,
16、 根據(jù)權利要求13所述的編譯器,其特征在于,所述預先設定的規(guī)則為 確定源程序代碼中函數(shù)的開始位置為驗證代碼在源程序代碼中的插入點;或者確定源程序代碼中函數(shù)的結束位置為驗證代碼在源程序代碼中的插入點; 或者確定源程序代碼中函數(shù)調用之前的位置為驗證代碼在源程序代碼中的插入 點;或者確定源程序代碼中函數(shù)調用之后的位置為驗證代碼在源程序代碼中的 插入點。
17、 根據(jù)權利要求13所述的編譯方法,其特征在于,所述驗證代碼為高級 語言形式的代碼。
18、 根據(jù)權利要求13所述的編譯器,其特征在于,所述編譯^t塊還包括 檢測單元,用于檢測所述源程序代碼中是否有語法錯誤;控制單元,用于在所述檢測單元檢測到所述源程序代碼有語法錯誤時,提 示出錯信息并終止分析所述預處理后的源程序代碼;或者提示出錯信息并繼續(xù) 分析預處理后的源程序代碼。
19、 根據(jù)權利要求13所述的編譯器,其特征在于,所述編譯模塊還包括 預處理單元,用于對所述源程序代碼進行預處理;
20、 根據(jù)權利要求13所述的編譯器,其特征在于,該編譯器還包括鏈接模 塊,用于將經(jīng)過二進制轉化處理后的目標程序代碼鏈接到相應的庫。
全文摘要
本發(fā)明公開了一種編譯方法及編譯器,涉及計算機技術領域,解決了現(xiàn)有技術中編譯出的目標程序版權得不到較安全保護的問題。本發(fā)明編譯方法包括按照預先設定的規(guī)則確定驗證代碼在源程序代碼中的插入點;將所述驗證代碼插入到所述插入點在源程序代碼中的對應位置;將包含插入了智能密鑰設備驗證代碼的源程序代碼轉換成目標程序代碼。本發(fā)明實施例主要用在計算機的編程中,特別是用在各種高級語言的編譯中。
文檔編號G06F21/22GK101533454SQ20091008232
公開日2009年9月16日 申請日期2009年4月14日 優(yōu)先權日2009年4月14日
發(fā)明者于華章, 舟 陸 申請人:北京飛天誠信科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
车险| 北安市| 隆尧县| 图片| 公安县| 彭山县| 伊宁市| 石狮市| 綦江县| 博爱县| 合山市| 伊通| 保康县| 五家渠市| 东兴市| 富民县| 泽库县| 天气| 寿光市| 江西省| 增城市| 交城县| 岳普湖县| 伊吾县| 衡南县| 金坛市| 上犹县| 鹤壁市| 贺兰县| 如东县| 花莲市| 新余市| 富蕴县| 沐川县| 梅河口市| 武宣县| 和龙市| 道真| 祁门县| 景洪市| 隆化县|