新四季網

一種Java卡調試信息的處理方法

2023-08-12 09:44:06 4

專利名稱:一種Java卡調試信息的處理方法
技術領域:
本發明涉及調試信息處理領域,尤其涉及一種Java卡調試信息的處理方法。
背景技術:
Java卡是一種可以運行Java程序的智慧卡,是Java技術和智慧卡技術的結合。運行在Java卡上的Java卡程序稱為Java卡Applet,它是原始碼級調試平臺的調試對象。經過近年來快速的發展,Java卡已經廣泛地應用在各種領域,尤其是通信和金融領域。在現有技術中,通常採用生成日誌的方法來對Java卡程序進行調試。在啟動虛擬機時傳遞一個參數,作為虛擬機開啟日誌記錄的標記,在虛擬機運行的時候將Java卡程序中的特定調試符號如函數、調用棧等信息列印在日誌中,採用實時列印或者寫文件等形式 查看日誌。但是這種方法效率低、操作不方便,對於資源信息(如變量值等)無法進行實時監視,不具有針對性,特別是對於一般的應用開發者來說,查看這樣的調試日誌比較困難。

發明內容
鑑於現有技術的不足,本發明提供了一種Java卡調試信息的處理方法,其具有方便於上層應用開發者使用、可實時監控和查看的特點。本發明提供的一種Java卡調試信息的處理方法,包括步驟A :獲取指令並檢測指令類型,如是設置指令,則執行步驟B,如是調試指令,則執行步驟E,如是其他,則根據指令進行操作;步驟B :按照預設規定對所述設置指令進行解析得到包頭和數據部分,對所述包頭進行解析,從所述設置指令包頭的解析結果中獲取請求ID和請求標記,判斷所述請求標記是否為預設值,是則執行步驟C,否則給發送裝置返回提示信息;步驟C :從所述設置指令包頭的解析結果中獲取命令集和命令,如所述命令集為事件請求命令集且所述命令對應的事件類型為設置事件,從所述解析結果中獲取調節器,如是位置調節器則根據位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換所述原字節碼,將所述原字節碼寫到事件列表中生成事件序列號,順序執行步驟D ;如是單步調節器,則設置單步調試信息,將事件寫到事件列表中生成事件序列號,順序執行步驟D ;如所述命令對應的事件類型為其他事件則根據設置指令進行操作;如所述命令集為其他命令集則根據設置指令進行操作;步驟D :根據預設規則設置第一返回數據,並將所述第一返回數據返回給發送裝置;步驟E :獲取虛擬機上當前運行的Java卡程序的字節碼,判斷所述讀取的字節碼是否為特殊字節碼,是則執行步驟F,否則執行步驟G ;步驟F :根據所述獲取的字節碼從事件列表中查找對應的原字節碼並用所述原字節碼替換所述獲取的字節碼,從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I;
步驟G :判斷事件列表中的單步調試標誌是否置位,是則步驟H,否則返回步驟E ;步驟H:根據所述獲取的字節碼從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I ;步驟I :根據所述預設規則設置第二返回數據,並將所述第二返回數據返回給發
送裝置。其中,所述步驟C和步驟E-步驟H分別替換為步驟C』和步驟E』 -步驟H』 ;步驟C』 從所述設置指令包頭的解析結果中獲取命令集和命令,如所述命令集為事件請求命令集且所述命令對應的事件類型為設置事件,從所述解析結果中獲取調節器,如是位置調節器則根據位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換所述原字節碼,將所述原字節碼寫到事件列表中生成事件序列號,順序執行步驟D ;如是單步調節器,則根據指令中的位置信息在虛擬機上運行的Java卡程序中查找 原字節碼,並用特殊字節碼替換所述原字節碼,並從指令中獲取單步調試信息,將單步事件寫到事件列表中生成事件序列號,順序執行步驟D ;如所述命令對應的事件類型為其他事件則根據設置指令進行操作;如所述命令集為其他命令集則根據設置指令進行操作;步驟E』 對調試指令進行解析並從解析結果中獲取字節碼,判斷所述獲取的字節碼是否為特殊字節碼,是則執行步驟F』,否則結束本次操作,等待虛擬機下發指令;步驟F』 判斷事件列表中的單步調試標誌是否置位,是則步驟G』,否則返回步驟H,;步驟G』 根據所述獲取的字節碼從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I ;步驟H』 根據特殊字節碼從事件列表中查找對應的原字節碼並用所述原字節碼替換所述特殊字節碼,從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I。其中,所述步驟C替換為步驟C」 ;步驟C」 從所述設置指令包頭的解析結果中獲取命令集和命令,如所述命令集為事件請求命令集且所述命令對應的事件類型為設置事件,從所述解析結果中獲取調節器,如是位置調節器則根據指令中的斷點位置信息從調試數據中讀取對應的原字節碼並保存,用特殊字節碼代替所述原字節碼;將所述斷點位置信息事件種類一起添加到斷點列表中,在事件列表中添加出棧事件生成事件序列號;如是單步調節器,則設置單步調試信息,將事件寫到事件列表中生成事件序列號;如所述命令對應的事件類型為其他事件則根據設置指令執行操作;如所述命令集為其他命令集則根據設置指令執行操作。其中,所述步驟A中通過指令格式檢測指令類型,具體包括如所述指令的格式符合第一預設格式則為設置指令,如所述指令的格式符合APDU格式則為調試指令。其中,所述步驟A中獲取指令包括從命令緩存中獲取指令或接收所述發送裝置發送的指令。其中,在判斷所述請求標記是否為預設值之前包括從所述設置指令包頭的解析結果中獲取指令長度,根據所述指令長度判斷所述設置指令是否完整,如完整則判斷所述設置指令是否為未處理指令,是則繼續,否則結束,如不完整則結束。其中,所述根據所述指令長度判斷所述設置指令是否完整,具體為
所述判斷所述設置指令所佔字節是否與所述指令長度相符,是則所述設置指令完整,否則所述設置指令不完整。其中,所述判斷所述請求標記是否為預設值,包括判斷所述獲取的請求標記是否為0x00,是則執行步驟E,否則給發送裝置返回提示信息。其中,所述給發送裝置返回提示信息,具體包括從所述設置指令的請求標記之後讀取兩字節的數據,並將所述讀取的數據返回給發送裝置。其中,所述步驟C具體包括步驟Cl :從所述設置指令包頭的解析結果中獲取命令集和命令,並檢測所述命令集的類型,如是事件請求命令集,則執行步驟C2,否則根據其他命令集進行操作;步驟C2 :判斷所述命令對應的事件類型,如是清除單個斷點事件,則執行步驟C3 ; 如是清除所有斷點事件,則執行步驟C5 ;如是設置事件,則執行步驟CS ;步驟C3 :對所述設置指令的數據部分進行解析,從所述設置指令數據部分的解析結果中獲取事件種類和事件請求ID,並根據所述事件種類和所述事件請求ID在事件列表中查找對應的事件,判斷是否找到匹配的事件,是則執行步驟C4,否則給發送裝置返回未找到匹配事件的信息;步驟C4 :結束當前操作清空所述響應緩存中的數據;步驟C5 :在所述事件列表中查找所有斷點事件;步驟C6 :清空所述事件列表中的所有斷點事件,並判斷是否清空完成,是則執行步驟C7,否則給發送裝置返回錯誤信息;步驟C7 :清空所述響應緩存中的數據並結束當前操作;步驟CS :從所述設置指令數據部分的解析結果中獲取事件種類和暫停政策;步驟C9 :從所述設置指令數據部分的解析結果中獲取調節器個數,根據所述調節器個數分配事件處理需要的緩存;步驟ClO :判斷所述調節器個數是否為0,是則給所述發送裝置返回錯誤信息,否則執行步驟Cll ;步驟Cll :從所述設置指令數據部分的解析結果中獲取調節器的種類,如是位置調節器,則進行設置斷點操作;如是單步調節器,則進行設置單步操作;如是其他調節器,則進行其他調節器的操作;如不是調節器,則給發送裝置返回錯誤信息。其中,所述步驟Cl中檢測所述命令集的類型具體包括判斷所述獲取的命令集的值是否為15,是則為事件請求命令集,否則為其他命令集。其中,所述步驟C2具體包括檢測所述獲取的命令所對應的值,如是01則事件類型為設置事件,如是02則事件類型為清除事件,如是03則事件類型為清除所有斷點事件。其中,所述步驟Cll中判斷調節器的種類,具體包括檢測從所述設置指令數據部分的解析結果中的調解器個數之後獲取的值,如是8則為位置調節器,如是12則為單步調節器,如獲取的數據與預設值不符則不是調節器。其中,所述步驟Cll中的進行設置斷點操作,包括步驟C12 :從所述設置指令數據部分的的解析結果中獲取斷點位置信息並進行存儲,所述斷點位置信息包括引用類型標識、引用類型ID、函數ID和偏移信息;步驟C13:根據所述引用類型標識、引用類型ID、函數ID和偏移信息在預先下載到所述虛擬機中的Java卡程序中查找對應的位置,讀取所述對應位置的原字節碼並保存,用特定字節碼替換所述對應位置的原字節碼;步驟C14 :將斷點信息和所述事件種類一起添加到斷點列表中,所述斷點信息包括所述原字節碼和斷點位置信息;步驟C15 :將事件寫入到事件列表中生成事件序列號,將所述事件序列號寫入到所述響應緩存的第一預設位置。其中,所述步驟Cll中的進行設置單步操作,包括步驟C16 :從所述設置指令數據部分的解析結果中獲取虛擬機線程ID、應用程式的單步指令方式和單步調試方式;步驟C17 :判斷所述單步指令方式是否為第一指令方式或所述單步調試方式是否 為單步進入,是則執行步驟C21,否則執行步驟C18 ;步驟C18 :從所述設置指令數據部分的解析結果中獲取當前運行的Java卡程序行對應的棧信息;步驟C19 :判斷所述單步指令方式是否為第二指令方式,是則執行步驟C20,否則執行步驟C21 ;步驟C20 :從所述設置指令數據部分的解析結果中獲取與所述棧信息對應的棧標號,順序執行步驟C21 ;步驟C21 :判斷所述單步調試方式是否為單步進入,是則執行步驟C22,否則執行步驟C24 ;步驟C22 :在所述事件列表中添加棧事件;步驟C23 :將事件列表中的單步調試標誌置位;步驟C24 :判斷所述設置單步操作的處理是否完成,是則執行步驟C25,否則給發送裝置返回錯誤信息;步驟C25 :將所述獲取的虛擬機線程ID、單步指令方式、單步調試方式存儲於事件列表中,生成事件序列號並將所述事件序列號寫入到響應緩存的第一預設位置。其中,所述步驟C23具體為將事件列表中的單步調試標誌的通知模式設置為I。其中,所述步驟D根據預設規定在響應緩存中設置第一返回數據,包括步驟Dl :在所述響應緩存的第二預設位置寫入與所述請求ID對應的響應ID和與所述請求標記匹配的響應標記;步驟D2 :在所述響應緩存的第三預設位置寫入兩個字節的狀態碼,並判斷所述狀態碼是否為0,是則執行步驟D3,否則執行步驟D4 ;步驟D3 :在所述響應緩存的第四預設位置寫入操作結果的實際數據長度,順序執行步驟D5 ;步驟D4:在所述響應緩存的第四預設位置寫入返回的最小數據長度,順序執行步驟D5 ;步驟D5 :判斷所述響應緩存的第三預設位置上的數據長度是否大於0,是則將所述第一返回數據返回給發送裝置,並清空所述響應緩存中的第一返回數據,否則直接清空所述響應緩存中的第一返回數據。其中,所述步驟F具體包括
步驟Fl :根據所述獲取的字節碼從所述虛擬機上的調試數據中獲取函數信息,根據所述函數信息從所述虛擬機上的調試數據中獲取所述字節碼的偏移信息;步驟F2 :根據所述函數信息和所述偏移信息在斷點列表中查找對應的斷點信息,如找到則執行步驟F3,如未找到則返回步驟E ;步驟F3 :從所述斷點信息中讀取與所述特殊字節碼對應的原字節碼;步驟F4 :根據所述函數信息從所述虛擬機上的調試數據中獲取類信息,根據所述類信息從所述虛擬機上的調試數據中獲取類型標識,根據所述類型標識從所述虛擬機上的調試數據中讀取相應的籤名信息,根據所述籤名信息從所述虛擬機上的調試數據中獲取對應的返回數據;步驟F5 :用所述原字節碼替換所述虛擬機上當前運行的Java卡程序中的所述特殊字節碼。 其中,所述步驟F2具體包括在所述斷點列表中的斷點信息中查找是否有與所述函數信息和所述特殊字節碼相對應的原字節碼,是則執行步驟F3,否則給所述發送裝置返回錯誤信息。其中,所述步驟H具體包括根據所述讀取的字節碼從所述虛擬機上的調試數據中讀取行信息,根據所述行信息從所述虛擬機上的調試數據中獲取函數信息,根據所述函數信息從所述虛擬機上的調試數據中獲取類信息,根據所述類信息從所述虛擬機上的調試數據中獲取引用類型標識,根據所述引用類型標識從所述虛擬機上的調試數據中獲取相應的籤名信息,根據所述籤名信息從所述虛擬機上的調試數據中獲取對應的返回數據。其中,所述步驟G具體包括判斷事件列表中的單步調試標誌的通知模式是否為1,是則置位,否則未置位。本發明與現有技術相比,具有以下優點本發明提供一種方便於上層應用開發者對Java卡進行調試的處理方法,通過對獲取的指令進行解析並控制虛擬機執行解析結果,以達到調試Java卡程序的目的;且在調試過程中實時監視和查看虛擬機中的信息(如變量值、調用棧信息和內存使用等);本發明中的處理方法可集成到主流的Java集成開發環境中,使得開發Java卡應用變得更簡單,只要熟悉目前主要的Java集成開發環境就能快速開發Java卡應用,可以使用集成開發環境中的單步調試,斷點設置等功能。


圖I為本發明實施例一提供的一種Java卡調試信息的處理方法流程圖;圖2為本發明實施例二提供的一種Java卡調試信息的處理方法流程圖;圖3為圖2中步驟108的實現過程流程圖;圖4為圖3中的調節器類型為單步調節器的處理過程流程圖;圖5為本發明實施例四提供的當接收到調試指令時的處理過程流程圖。
具體實施例方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。實施例一本發明實施例一提供一種Java卡調試信息的處理方法,如圖I所示,包括步驟A :獲取指令並檢測指令類型,如是設置指令,則執行步驟B,如是調試指令,則執行步驟E,如是其他,則根據指令進行操作; 本實施例中,獲取的指令可以為發送裝置法送的指令或者是命令緩存中存儲的指令;如獲取的指令的格式符合第一預設格式則為設置指令,如所述指令的格式符合APDU格式則為調試指令; 步驟BI :按照預設規定對設置指令進行解析得到包頭和數據部分,對包頭進行解析,從設置指令包頭的解析結果中獲取請求ID和請求標記;步驟B2 :判斷請求標記是否為預設值,是則執行步驟C,否則給發送裝置返回提示
信息;具體的,在本實施例中,在判斷請求標記是否為預設值之前包括從設置指令包頭的解析結果中獲取指令長度,根據指令長度判斷設置指令是否完整,如完整則判斷設置指令是否為未處理指令,是則繼續,否則結束,如不完整則結束;本實施例中的預設值為0x00 ;返回提示信息為從設置指令的請求標記之後讀取的兩字節的數據;步驟Cl :從設置指令包頭的解析結果中獲取命令集和命令,檢測命令集的類型和命令對應的事件類型,如命令集為事件請求命令集且命令對應的事件類型為設置事件,則執行步驟C2,如命令對應的事件類型為其他事件則根據設置指令進行操作;如命令集為其他命令集則根據設置指令進行操作;步驟C2 :從解析結果中獲取調節器,並檢測調節器的種類,如是位置調節器則執行步驟C3,如是單步調節器,則執行步驟C3 ;本實施例中如獲取的調節器是其他調節器,則進行相應操作,具體操作不在本專利的保護範圍,故不詳述,步驟C3 :根據位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換原字節碼,將原字節碼寫到事件列表中生成事件序列號,執行步驟D ;步驟C4:設置單步調試信息,將事件寫到事件列表中生成事件序列號,順序執行步驟D ;步驟D :根據預設規則設置第一返回數據並將其返回給發送裝置;本實施例中,根據預設規則設置第一返回數據具體為步驟Dl :在響應緩存的第二預設位置寫入與請求ID對應的響應ID和與請求標記匹配的響應標記;步驟D2 :在響應緩存的第三預設位置寫入兩個字節的狀態碼,並判斷狀態碼是否為0,是則執行步驟D3,否則執行步驟D4 ;步驟D3 :在響應緩存的第四預設位置寫入操作結果的實際數據長度,順序執行步驟D5 ;
步驟D4:在響應緩存的第四預設位置寫入返回的最小數據長度,順序執行步驟D5 ;步驟D5 :判斷響應緩存的第三預設位置上的數據長度是否大於0,是則將第一返回數據返回給發送裝置,並清空響應緩存中的第一返回數據,否則直接清空響應緩存中的第一返回數據;步驟E :獲取虛擬機上當前運行的Java卡程序的字節碼,判斷讀取的字節碼是否為特殊字節碼,是則執行步驟F,否則執行步驟G ;步驟F :根據獲取的字節碼從事件列表中查找對應的原字節碼並用原字節碼替換獲取的字節碼,從虛擬機中的調試數據中獲取返回數據,順序執行步驟I ;步驟G :判斷事件列表中的單步調試標誌是否置位,是則步驟H,否則返回步驟E ;
步驟H:根據獲取的字節碼從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I;步驟I :根據預設規則設置第二返回數據並將其返回給發送裝置。本實施例中的步驟Cl-步驟C2和步驟E-步驟H可分別替換為步驟C』和步驟E,-步驟H』 ;步驟C』 從設置指令包頭的解析結果中獲取命令集和命令,如命令集為事件請求命令集且命令對應的事件類型為設置事件,從解析結果中獲取調節器,如是位置調節器則根據位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換原字節碼,將原字節碼寫到事件列表中生成事件序列號;如是單步調節器,則根據指令中的位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換原字節碼,並從指令中獲取單步調試信息,將單步事件寫到事件列表中生成事件序列號;如命令對應的事件類型為其他事件則根據設置指令執行操作;如命令集為其他命令集則根據設置指令執行操作;步驟E』 對調試指令進行解析並從解析結果中獲取字節碼,判斷所述獲取的字節碼是否為特殊字節碼,是則執行步驟F』,否則結束本次操作,等待虛擬機下發指令;步驟F』 判斷事件列表中的單步調試標誌是否置位,是則步驟G』,否則返回步驟H,;步驟G』 根據獲取的字節碼從虛擬機中的調試數據中獲取返回數據,順序執行步驟I ;步驟H』根據特殊字節碼從事件列表中查找對應的原字節碼並用原字節碼替換特殊字節碼,從虛擬機中的調試數據中獲取返回數據,順序執行步驟I。本實施例中的步驟Cl-步驟C2還可替換為步驟C」 ;步驟C」從設置指令包頭的解析結果中獲取命令集和命令,如命令集為事件請求命令集且命令對應的事件類型為設置事件,從解析結果中獲取調節器,如是位置調節器則根據指令中的斷點位置信息從調試數據中讀取對應的原字節碼並保存,用特殊字節碼代替原字節碼;將所述斷點位置信息事件種類一起添加到斷點列表中,在事件列表中添加出棧事件生成事件序列號;如是單步調節器,則設置單步調試信息,將事件寫到事件列表中生成事件序列號;如命令對應的事件類型為其他事件則根據設置指令執行操作;如命令集為其他命令集則根據設置指令執行操作。
實施例二本發明實施例二提供了一種Java卡調試信息的處理方法,如圖2所示,包括步驟101 :獲取指令並檢測指令類型,如是設置指令,則執行步驟102,如是調試指令,則進行調試處理,如是其他指令則執行相應操作;如是設置指令時,在步驟101之前還包括接收發送裝置發送的設置指令並存儲到命令緩存中,步驟101中獲取指令為從命令緩存中獲取設置指令;如是調試指令,則步驟101中獲取指令為接收第一模塊發送的調試指令;本實施例中檢測指令的類型是通過檢測指令的格式來實現的;其中,調試指令是APDU指令格式;設置指令符合第一預設格式,設置指令包括包頭和數據部分,其中包頭是固定格式,包括五個字節段各字節段的長度分別為四個字節、四個字節、一個字節、一個字 節、一個字節本實施例中,進行調試處理的具體實現過程在實施例三中詳述;如檢測到指令類型是其他指令,不在本發明的保護範圍之內,故不進行詳述;步驟102 :對設置指令進行解析,得到包頭和數據部分,再對包頭進行解析,從設置指令包頭的解析結果中獲取指令長度;步驟103 :根據指令長度判斷設置指令是否完整,是則執行步驟104,否則結束操作;本實施例中,步驟103具體為判斷設置指令所佔字節否與指令長度相符,是則設置指令完整,否則設置指令不完整;步驟104 :從設置指令包頭的解析結果中獲取請求ID和請求標記;本實施例中,請求ID和請求標記在設置指令包頭的解析結果中的指令長度之後,分別佔四字節和一字節;步驟105 :判斷請求標記是否為預設值,是則執行步驟107,否執行步驟106 ;在本實施例中的請求標記(Flags)的預設值為0x00 ;步驟106 :給發送裝置返回提示信息,執行步驟115 ;本實施例中步驟106包括從設置指令的請求標記之後獲取兩個字節數據並返回給發送裝置;步驟107 :從設置指令包頭的解析結果中獲取命令集和命令;本實施例中的命令集和命令在設置指令包頭的解析結果中的請求標記之後,各佔一個字節;本實施例中有18個命令集,如方法命令集、事件請求命令集等;方法命令集中包括行號表、變量表、字節碼、丟棄的函數、有籤名的變量表等命令,事務請求命令集(OF)中包括設置斷點、清除單個斷點、清除所有斷點等命令;步驟108 :根據命令集和命令進行相應操作,並將操作結果寫入到響應緩存的第一預設位置;本實施例中具體以事件請求命令集為例進行說明,參見圖3和圖4,其他命令集不在本專利保護範圍內,故不進行詳述;步驟109 :將響應ID和與響應標記分別寫入到響應緩存中的第二預設位置;本實施例中的響應ID和請求ID相同,均為四個字節;響應標記與請求標記相匹配,均為一個字節,具體值為0x80 ;
本實施例中的響應緩存中有包頭和數據部分,其中包頭包括第四預設位置、第二預設位置和第三預設位置,各個字節段的長度分別為四個字節、五個字節、兩個字節;數據部分為第一預設位置;步驟110 :在響應緩存的第三預設位置寫入兩個字節狀態碼,並判斷狀態碼是否為0x0000,是則執行步驟111,否則執行步驟112 ;步驟111 :在響應緩存的第四預設位置寫入操作結果的實際數據長度,順序執行步驟113 ;步驟112 :在響應緩存的第四預設位置寫入返回的最小數據長度,順序執行步驟113 ;具體的,本實施例中返回的最小數據長度為11 ;
步驟113 :判斷響應緩存的第四預設位置上的數據長度是否大於0,是則執行步驟114,否則執行步驟115;步驟114 :將響應緩存的數據發送給發送裝置,順序執行步驟115 ;步驟115 :清空響應緩存中的數據;本實施例中也可不清空響應緩存中數據而結束當前操作。本實施例一的方法中,在接收到設置指令後首先對其進行解析,然後根據解析結果進行相應操作,操作完成後根據預設格式設置返回數據,簡化人工設置調試信息的過程。實施例三本實施例三是對實施例二中步驟108的詳細闡述,具體以事件請求命令集為例進行說明,如圖3和圖4所示,包括步驟201 :檢測獲取的命令集的類型,如是事件請求命令集,則執行步驟202,否則根據獲取的設置指令進行操作;具體的,在本實施例中,判斷獲取的命令集的值是否為15,是則為事件請求命令集,否則為其他命令集,進行相應的操作,其他命令集(如方法命令集、獲取虛擬機相關信息的虛擬機命令集、獲取類型信息的類命令集、數組命令集、接口命令集、獲取函數與變量信息的方法命令集、變量命令集、獲取棧信息的棧幀命令集等)的操作不在本專利的保護範圍之內,故不進行詳述;步驟202 :判斷獲取的命令對應的事件類型,如是清除單個斷點事件,則執行步驟203 ;如是清除所有斷點事件,則執行步驟206 ;如是設置事件,則執行步驟209 ;本實施例中,步驟202具體為檢測所述獲取的命令所對應的值,如是01則為設置事件,如是02則為清除單個斷點事件,如是03則為清除所有斷點事件;步驟203 :對設置指令的數據部分進行解析,從設置指令數據部分的解析結果中獲取事件種類和事件請求ID ;本實施例中的事件種類佔一個字節,事件請求ID佔四個字節;步驟204 :根據事件種類和事件請求ID在事件列表中查找對應的事件,並判斷是否找到匹配的事件,是則執行步驟205,否則給發送裝置返回未找到匹配事件的信息;步驟205 :結束當前操作並清空響應緩存中的數據;本實施例中該步驟205中也可不用清空響應緩存中的數據直接結束操作;步驟206 :在事件列表中查找所有斷點事件;
步驟207 :清空所述事件列表中的所有斷點事件的信息,並判斷是否清空完成,是則執行步驟208,否則給發送裝置返回錯誤信息;步驟208 :清空響應緩存中的數據並結束當前操作;本實施例中該步驟208中可不清空響應緩存中的數據直接結束當前操作;步驟209 :從設置指令數據部分的解析結果中獲取事件種類和暫停政策;本實施例中,事件種類和暫停政策在所述設置指令數據部分的事件請求ID之後,且各佔一個字節;暫停政策為00表示暫停所有線程,暫停政策為01表示暫停當前線程等;步驟210 :從設置指令數據部分的解析結果中獲取調節器個數,並根據調節器個數分配事件處理需要的緩存;
本實施例中的調節器個數在設置指令數據部分的解析結果中的暫停政策之後,佔四個字節;步驟211 :判斷調節器個數是否為0,是則給發送裝置返回錯誤信息,否則執行步驟 212 ;步驟212 :從設置指令數據部分的解析結果中獲取調節器的種類,如是位置調節器,則進行設置斷點操作,執行步驟213 ;如是單步調節器,則進行設置單步操作,執行步驟216 ;如是其他調節器,則進行其他調節器的相應操作;如不是調節器,則給發送裝置返回錯誤信息;具體的,本實施例中,調節器的種類在設置指令數據部分的解析結果中的調解器個數之後,如獲取的值為8則為位置調節器,如獲取的值為12則為單步調節器;其他調節器(如計數器調節器、依賴條件調節器、線程調節器、類型調節器、類型排除調節器、類型匹配調節器、異常調節器、變量調節器、對象實體調節器)的相應操作不在本專利保護範圍之內,故不進行詳述;步驟213 :從設置指令數據部分的解析結果中獲取斷點位置信息並進行存儲,斷點位置信息包括引用類型標識、引用類型ID、函數ID和偏移信息;本實施例中,斷點位置信息在設置指令數據部分的解析結果中的調節器種類之後,其中類型標識佔一個字節、引用類型標識ID佔四個字節、函數ID佔四個字節、偏移信息佔八個字節;本實施例中的類型標識如為00則表示類;如為01則表示接口 ;如為02則表示數組;步驟214:根據引用類型標識、引用類型ID、函數ID和偏移信息在預先下載到虛擬機中的Java卡程序中查找對應的位置,讀取該位置的原字節碼並保存,用特定字節碼替換原字節碼;具體的,本實施例中的特定字節碼為非java卡自身的字節碼,如0xC2 ;本實施例中的步驟214具體為根據引用類型標識在Java卡程序中找到當前類型,根據引用類型ID在當前類型中找到具體的類(當前類型(或接口或者數組)中的第幾個類(或接口或者數組)),再在找到的具體類(或接口或數組)裡根據函數ID找到對應的當前函數,根據偏移信息在當前函數中找到原字節碼;比如類型ID為00,類型ID為03,函數ID為04,偏移信息為08,則查找原字節碼具體為根據00找到類,根據03找到第三個類,根據04在第三個類中找到第四個函數,根據08在第四個函數中找到位於偏移8位元組位置處的原字節碼;步驟215 :將斷點信息(包括原字節碼和斷點位置信息)和事件種類一起添加到斷點列表中,將事件寫入到事件列表中生成事件序列號,將該事件序列號寫入到響應緩存的
第一預設位置;本實施例中的響應緩存的第一預設位置是數據部分;步驟216 :從設置指令數據部分的解析結果中獲取虛擬機線程ID、Java卡程序的單步指令方式和單步調試方式;在本實施例中,虛擬機線程ID、Java卡程序的單步指令方式和單步調試方式在設置指令數據部分的解析結果中的調節器種類之後;
本實施例中,虛擬機調用函數中還有被調用的函數;具體的,單步指令方式包括第一單步指令方式(即控制Java虛擬機以一句代碼為單元進行運行)和第二單步指令方法(即控制java虛擬機以一行代碼為單元進行運行);單步調試方式包括單步進入(當虛擬機接收到單步進入命令時,本實施例的方法控制虛擬機進入被調用的函數內執行)、單步跳過(當虛擬機接收到單步跳過命令時,本實施例的方法控制虛擬機跳過被調用的函數繼續執行調用函數)和單步跳出(當虛擬機接收到單步進出命令時,本實施例的方法控制虛擬機跳出被調用函數繼續執行調用函數);步驟217 :判斷單步指令方式是否為第一指令方式或單步調試方式是否為單步進入,是則執行步驟221,否則執行步驟218 ;步驟218 :從設置指令數據部分的解析結果中獲取Java卡程序行對應的棧信息;本實施例中,棧信息在設置指令數據部分的解析結果中的單步調試方式之後;虛擬機可通過棧信息將觸發事件(單步觸發或斷點觸發)反饋給發送裝置;步驟219 :判斷單步指令方式是否為第二指令方式,是則執行步驟220,否則執行步驟221 ;步驟220 :從設置指令數據部分的解析結果中獲取與棧信息對應的棧標號;本實施例中的棧標號在設置指令數據部分的解析結果中的棧信息之後;步驟221 :判斷單步調試方式是否為單步進入,是則執行步驟222,否則執行步驟224 ;步驟222 :在事件列表中添加出棧事件;本實施例中,出棧事件是虛擬機在觸發事件結束後的事件處理過程;棧事件的內容包括調試器個數、暫停政策、虛擬機線程ID、調試器種類;步驟223 :將事件列表中的單步調試標誌置位,順序執行步驟224 ;本實施例中,步驟223具體為將事件列表中的單步調試標誌的通知模式設置為
I;步驟224 :判斷設置單步操作的處理是否完成,是則執行步驟225,否則給發送裝置返回錯誤信息;步驟225 :將獲取的虛擬機線程ID、Java卡程序的單步指令方式、單步調試方式存儲於事件列表中,生成事件序列號並將其寫入到響應緩存的第一預設位置;本實施例中相應緩存的第一預設位置是數據部分。實施例四
本發明實施例四提供當接收到調試指令時的處理過程,包括步驟401 :獲取虛擬機上當前運行的Java卡程序的當前字節碼;本實施例中,當接收到調試指令後觸發進行調試處理,獲取虛擬機上當前運行的Java卡程序的當前字節碼;步驟402 :判斷獲取的當前字節碼是否為特殊字節碼,是則執行步驟403,否則413 ;當虛擬機運行到特殊字節碼時,本實施例中的方法控制虛擬機暫停運行,直到接收到啟動虛擬機運行的調試指令後再次運行,如單步指令等;本實施例中,如當前字節碼為特殊字節碼且調試標識置位則為單步事件,如當前字節碼為特殊字節碼且調試標識未置位則為斷點事件; 步驟403 :根據獲取的字節碼從虛擬機上的調試數據中獲取函數信息;步驟404 :根據函數信息從虛擬機上的調試數據中獲取偏移信息;本實施例中的偏移信息為當前運行代碼在當前函數中的偏移值;步驟405 :根據獲取的函數信息和偏移信息在事件列表中查找對應的斷點信息,如找到則執行步驟406,如未找到則返回步驟401 ;本實施例中的步驟405具體包括在事件列表中的斷點信息中查找是否有與獲取的函數信息和特殊字節碼相對應的原字節碼,是則執行步驟406,否則結束;步驟406 :從事件列表的斷點信息中讀取對應的原字節碼;步驟407 :根據函數信息從虛擬機上的調試數據中獲取類信息;本實施例中的類信息包括類、接口、數組等;步驟408 :根據類信息從虛擬機上的調試數據中獲取對應的類型標識;步驟409 :根據類型標識從虛擬機上的調試數據中獲取籤名信息;本實施例中的籤名信息包括類型名稱、訪問修飾符等;步驟410 :根據籤名信息從虛擬機上的調試數據中獲取對應的返回數據;本實施例中的函數信息、位置信息、類信息、類型標識、對應的數據等都預先發送給虛擬機進行存儲的;本實施例中獲取的數據包括一個字節的暫停政策、四個字節的當前返回數據中包含的已觸發的事件個數、一個字節的事件類型、四個字節的事件請求ID、四個字節事件觸發線程ID和位置信息,其中位置信息包括一個字節的類型標識、四個字節的引用類型ID、四個字節的函數ID和八個字節的偏移信息;其中,如當前操作是單步調試過程中的單步進入觸發,事件類型為O ;如當前操作是單步調試的單步跳過觸發,事件類型為I ;如當前操作是斷點觸發時,事件類型為2 ;如當前操作時單步調試的單步跳出時,事件類型為3 ;步驟411 :按照預設格式設置第二返回數據,並將其發送給發送裝置;本實施例中的第二返回數據包括包頭和數據部分,包頭格式參照實施例一中的返回數據的包頭格式,在此不再贅述,將獲取的返回數據作為數據部分;步驟412 :用原字節碼替換虛擬機上當前運行的Java卡程序的特殊字節碼,執行步驟420 ;本實施例中的發送裝置可將接收的數據和信息顯示出來,方便用戶實時監測和查看。步驟413 :判斷事件列表中的單步調試標誌是否置位,是則執行步驟414,否則返回步驟401 ;本實施例中,步驟413具體為判斷事件列表中的單步調試標誌的通知模式是否為I ;本實施例中,當單步調試標誌位置時,本實施例的方法控制虛擬機進行單步調試,包括單步進入、單步跳出和單步跳出;步驟414 :根據獲取的字節碼從虛擬機上的調試數據中獲取行信息;步驟415 :根據行信息從虛擬機上的調試數據中獲取函數信息,根據函數信息從虛擬機上的調試數據中獲取的類信息; 本實施例中的類信息包括類、接口、數組等;步驟416 :根據類信息從虛擬機上的調試數據中獲取引用類型標識;步驟417 :根據引用類型標識從虛擬機上的調試數據中獲取籤名信息;步驟418 :根據籤名信息從虛擬機上的調試數據中獲取對應的返回數據;步驟419 :按照預設格式設置第二返回數據,並將其發送給發送裝置,順序執行步驟 420 ;本實施例中的返回數據格式可參照步驟411實現,在此不再贅述;步驟420 :等待接收調試指令,當接收到調試指令時,返回步驟401。下面以具體的實例來說明本發明的實現過程,具體的以調試信息為斷點信息的為例;虛擬機接收到發送裝置發送的設置指令為00 00 00 23 00 00 00 54 00 OF 01
0201 00 00 00 01 07 01 00 00 01 08 00 CB CE B8 00 00 00 00 00 00 00 07 ;虛擬機對上述指令進行解析,解析結果為00 00 00 23表示指令長度,00 00 00 54表示請求ID,00表示請求標記,OF表示命令集,01表示命令,02表示事件種類中的中斷類型,01表示暫停政策中的暫停當前線程,00 00 00 01表示調節器個數,07表示調節器種類中的位置調節器,01表示類型標識,0000 01 08表示引用類型標識ID,00 CB CE B8表示函數ID,00 00 00 00 00 00 00 07表示
偏移息;步驟114中虛擬機給發送裝置返回的第一返回數據為00 00 00 OF 00 00 0054 80 00 00 00 00 00 12 ;其中,00 00 00 OF表示返回的實際數據長度,00 00 00 54表示請求ID,80表示響應標記,00 00表示沒有錯誤而寫入的兩個字節狀態碼,00 00 00 12表示生成的斷點事件序列號;實施例四中調試觸發斷點時在在步驟411中給發送裝置返回的第二返回數據為包頭「00 00 00 2A 00 00 00 03 00 00 00」 和數據信息「01 00 00 00 01 02 00 00 0012 00 00 01 04 01 00 00 01 08 00 CB CE B8 00 00 00 00 00 00 00 07」;其中,00 00 00 2A表示數據長度,00 00 00 03表示事件觸發的標識(說明是第三次觸發該事件),00表示響應標記,00 00表示沒有錯誤而寫入的兩個狀態碼,01表示暫停政策中的暫停當前線程,00 00 00 01表示的是當前返回數據中包含的已觸發的事件個數(當有多線程運行時,同一個斷點可能被多個線程觸發,就有多個事件被觸發,本實施例中只有一個事件被觸發),02表示中斷事件,OO 00 00 12表示事件序列號,00 00 01 04表示事件觸發線程ID,01表示類型標識,00 00 01 08表示引用類型標識,00 CB CE B8表示函數ID,00 00 00 00 00 00 00 07表示偏移信息。在本發明實施例中,單步調節器的實現方式還有另一種方法,即實施例二中的步驟216-步驟225替換為216』-步驟219』,其他步驟的實現方式和實施例二相同,在此不再贅述;步驟216』 從設置指令數據部分的解析結果中獲取斷點位置信息並進行存儲,斷點位置信息包括引用類型標識、引用·類型ID、函數ID和偏移信息;步驟217』 根據引用類型標識、引用類型ID、函數ID和偏移信息在預先下載到虛擬機中的Java卡程序中查找對應的位置,讀取該位置的原字節碼並保存,用特定字節碼替換原字節碼;步驟218』 從設置指令數據部分的解析結果中獲取虛擬機線程ID、Java卡程序的單步指令方式和單步調試方式;步驟219』 將斷點信息(包括原字節碼和斷點位置信息)和事件信息(包括事件種類、虛擬機線程ID、Java卡程序的單步指令方式和單步調試方式)一起添加到單步列表中,將事件寫入到事件列表中生成事件序列號,將該事件序列號寫入到響應緩存的第一預設位置,將單步標識置位。相應的,在虛擬機進行調試時,虛擬機每讀取一個字節碼發送給處理裝置並停止運行,處理裝置接收到字節碼後執行相應操作,即處理裝置接收到調試指令的處理過程包括步驟401』對調試指令進行解析,並從解析結果中獲取字節碼,判斷獲取的字節碼是否為特殊字節碼,是則執行步驟402』,否則結束,等待虛擬機下發指令;步驟402』:判斷解析結果中單步標識是否置位,是則執行步驟413』,否則執行步驟403,;步驟402』具體為判斷事件列表中的單步調試標誌的通知模式是否為I ;本實施例中,當單步調試標誌位置時,本實施例的方法控制虛擬機進行單步調試,包括單步進入、單步跳出和單步跳出;步驟403』 根據獲取的字節碼從虛擬機上的調試數據中獲取函數信息;步驟404』 根據函數信息從虛擬機上的調試數據中獲取偏移信息;本實施例中的偏移信息為當前運行代碼在當前函數中的偏移值;步驟405』 根據獲取的函數信息和偏移信息在事件列表中查找對應的斷點信息,如找到則執行步驟406』,如未找到則返回步驟401』 ;本實施例中的步驟405』具體包括在事件列表中的斷點信息中查找是否有與獲取的函數信息和特殊字節碼相對應的原字節碼,是則執行步驟406』,否則結束;步驟406』 從事件列表的斷點信息中讀取對應的原字節碼;步驟407』 根據函數信息從虛擬機上的調試數據中獲取類信息;本實施例中的類信息包括類、接口、數組等;步驟408』 根據類信息從虛擬機上的調試數據中獲取對應的類型標識;
步驟409』 根據類型標識從虛擬機上的調試數據中獲取籤名信息;本實施例中的籤名信息包括類型名稱、訪問修飾符等;步驟410』 根據籤名信息從虛擬機上的調試數據中獲取對應的返回數據;本實施例中的函數信息、位置信息、類信息、類型標識、對應的數據等都是預先發送給虛擬機進行存儲的;本實施例中獲取的數據包括一個字節的暫停政策、四個字節的當前返回數據中包含的已觸發的事件個數、一個字節的事件類型、四個字節的事件請求ID、四個字節事件觸發線程ID和位置信息,其中位置信息包括一個字節的類型標識、四個字節的引用類型ID、四個字節的函數ID和八個字節的偏移信息;其中,如當前操作是單步調試過程中的單步進入觸發,事件類型為O ;如當前操作 是單步調試的單步跳過觸發,事件類型為I ;如當前操作是斷點觸發時,事件類型為2 ;如當前操作時單步調試的單步跳出時,事件類型為3 ;步驟411』 按照預設格式設置第二返回數據,並將其發送給發送裝置;本實施例中的第二返回數據包括包頭和數據部分,包頭格式參照實施例一中的返回數據的包頭格式,在此不再贅述,將獲取的返回數據作為數據部分;步驟412』 用原字節碼替換虛擬機上當前運行的Java卡程序的特殊字節碼,並給虛擬機返回單步提示信息;本實施例中的發送裝置可將接收的數據和信息顯示出來,方便用戶實時監測和查看;步驟413』 根據獲取的字節碼從虛擬機上的調試數據中獲取行信息;步驟414』 根據行信息從虛擬機上的調試數據中獲取函數信息,根據函數信息從虛擬機上的調試數據中獲取的類信息;本實施例中的類信息包括類、接口、數組等;步驟415』 根據類信息從虛擬機上的調試數據中獲取引用類型標識;步驟416』 根據引用類型標識從虛擬機上的調試數據中獲取籤名信息;步驟417』 根據籤名信息從虛擬機上的調試數據中獲取對應的返回數據;步驟418』 按照預設格式設置第二返回數據,並將其發送給發送裝置;步驟419』 用存儲的原字節碼代替虛擬機上當前運行的Java程序的特殊字節碼,並給虛擬機返回單步提示信息;虛擬機在接收到單步提示信息之後,如是斷點調試,則虛擬機開始運行執行字節碼;如是單步調試,則虛擬機開始運行執行字節碼,進行單步調試。在本發明實施例中,如處理裝置設置在虛擬機中,則實施例二中的步驟213-步驟215相應的替換為sl_s3,其他步驟的實現方式和實施例二的步驟一樣,在此不再贅述;步驟Si :從設置指令數據部分的解析結果中獲取Java卡程序行對應的棧信息和棧標號;本實施例中,虛擬機可通過棧信息將觸發事件(斷點觸發)反饋給發送裝置;棧標號包括函數位置和偏移值;步驟s2 :根據棧標號在預先下載到虛擬機中的Java卡程序中查找對應的位置,讀取該位置的原字節碼並保存,用特殊字節碼代替原字節碼;
步驟s3 :將斷點信息(棧標號和原字節碼)和事件種類一起添加到斷點列表中,在事件列表中添加出棧事件生成事件序列號,將該事件序列號寫入到響應緩存的第一預設位置。相應的,在虛擬機進行調試時,虛擬機讀取到字節碼後先進行判斷,如不是特殊字節碼是則繼續運行程序並讀取下一個字節碼;如是特殊字節碼,則停止運行,進行調試操作,如單步標識置位,則執行單步調試操作,否則執行斷點調試操作;即實施例三中的步驟401-步驟419所有操作都有虛擬機完成,分別替換為步驟401』』 -步驟419』』 步驟401』 』 虛擬機讀取當前運行的Java卡程序的字節碼;步驟402』 』 :虛擬機判斷讀取的字節碼是否為特殊字節碼,是則執行步驟403」,否則執行步驟413」;
步驟403』 』 虛擬機根據獲取的字節碼從存儲的調試數據中獲取函數信息;步驟404』 』 虛擬機根據函數信息從存儲的調試數據中獲取偏移信息;步驟405』 』 虛擬機根據獲取的函數信息和偏移信息在事件列表中查找對應的斷點信息,如找到則執行步驟406」,如未找到則返回步驟401」 ;步驟406』 』 :虛擬機從事件列表的斷點信息中讀取對應的原字節碼;步驟407』 』 虛擬機根據函數信息從存儲的調試數據中獲取類信息;步驟408』 』 虛擬機根據類信息從虛擬機上的調試數據中獲取對應的類型標識;步驟409』 』 虛擬機根據類型標識從存儲的調試數據中獲取籤名信息;步驟410』 』 虛擬機根據籤名信息從存儲的調試數據中獲取對應的返回數據;步驟411』』 虛擬機按照預設格式設置第二返回數據,並將其發送給發送裝置;步驟412』 』 虛擬機用原字節碼替換虛擬機上當前運行的Java卡程序的特殊字節碼;步驟413』 』:判斷事件列表中的單步調試標誌是否置位,是則執行步驟414』 』,否則返回步驟401』』 ;步驟414』 』 根據獲取的字節碼從預先下載存儲的調試數據中獲取行信息;步驟415』 』 根據行信息從調試數據中獲取函數信息,根據函數信息從調試數據中獲取的類信息;本實施例中的類信息包括類、接口、數組等;步驟416』 』 根據類信息從調試數據中獲取引用類型標識;步驟417』 』 根據引用類型標識從調試數據中獲取籤名信息;步驟418』 』 根據籤名信息從調試數據中獲取對應的返回數據;步驟419』 』 按照預設格式設置第二返回數據,並將其發送給發送裝置。本實施例中,當單步調試標誌置位,控制虛擬機進行單步進入調試時,獲取虛擬機的棧個數為2 (從java卡應用入口算),獲取的棧頂位置為420 ;在虛擬機執行完該函數時即觸發出棧事件,棧頂位置變成410 (棧由10位元組保存),棧個數變為I。本發明的處理裝置可以和虛擬機分別單獨設置進行工作,處理裝置將接收到的設置指令進行處理並將結果返回給發送裝置,處理裝置在接收到調試指令時從虛擬機上獲取當前執行的字節碼進行判斷處理,進而來控制虛擬機進行調試;或者處理裝置也可以和虛擬機相互嵌套設置進行工作,處理裝置將接收到的設置指令進行處理並將結果返回給發送裝置,處理裝置在接收到調試指令時從虛擬機上獲取當前執行的字節碼進行判斷處理,進而來控制虛擬機進行調試;或者處理裝置還可設置在虛擬機中進行工作,當虛擬機將接收到的設置指令進行處理並將結果返回給發送裝置,虛擬機在接收到調試指令時獲取當前執行的字節碼進行判斷處理,處理後進行調試操作。以上所述,僅為本發明較佳的具體實施方式
,但本發明的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本發明公開的技術範圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護範圍之內。因此,本發明的保護範圍應該以權利要求的保護範圍為準。·
權利要求
1.一種JAVA卡調試信息的處理方法,其特徵在於,包括 步驟A :獲取指令並檢測指令類型,如是設置指令,則執行步驟B,如是調試指令,則執行步驟E,如是其他,則根據指令進行操作; 步驟B :按照預設規定對所述設置指令進行解析得到包頭和數據部分,對所述包頭進行解析,從所述設置指令包頭的解析結果中獲取請求ID和請求標記,判斷所述請求標記是否為預設值,是則執行步驟C,否則給發送裝置返回提示信息;步驟C :從所述設置指令包頭的解析結果中獲取命令集和命令,如所述命令集為事件請求命令集且所述命令對應的事件類型為設置事件,從所述解析結果中獲取調節器,如是位置調節器則根據位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換所述原字節碼,將所述原字節碼寫到事件列表中生成事件序列號,順序執行步驟D ;如是單步調節器,則設置單步調試信息,將事件寫到事件列表中生成事件序列號,順序執行步驟D ;如所述命令對應的事件類型為其他事件則根據設置指令進行操作;如所述命令集為其他命令集則根據設置指令進行操作; 步驟D :根據預設規則設置第一返回數據,並將所述第一返回數據返回給發送裝置; 步驟E :獲取虛擬機上當前運行的Java卡程序的字節碼,判斷所述讀取的字節碼是否為特殊字節碼,是則執行步驟F,否則執行步驟G ; 步驟F :根據所述獲取的字節碼從事件列表中查找對應的原字節碼並用所述原字節碼替換所述獲取的字節碼,從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I ; 步驟G :判斷事件列表中的單步調試標誌是否置位,是則步驟H,否則返回步驟E ; 步驟H :根據所述獲取的字節碼從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I ; 步驟I :根據所述預設規則設置第二返回數據,並將所述第二返回數據返回給發送裝置。
2.如權利要求I所述的方法,其特徵在於,所述步驟C和步驟E-步驟H分別替換為步驟C,和步驟E』 -步驟H』 ; 步驟C』 從所述設置指令包頭的解析結果中獲取命令集和命令,如所述命令集為事件請求命令集且所述命令對應的事件類型為設置事件,從所述解析結果中獲取調節器,如是位置調節器則根據位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換所述原字節碼,將所述原字節碼寫到事件列表中生成事件序列號,順序執行步驟D ;如是單步調節器,則根據指令中的位置信息在虛擬機上運行的Java卡程序中查找原字節碼,並用特殊字節碼替換所述原字節碼,並從指令中獲取單步調試信息,將單步事件寫到事件列表中生成事件序列號,順序執行步驟D ;如所述命令對應的事件類型為其他事件則根據設置指令進行操作;如所述命令集為其他命令集則根據設置指令進行操作; 步驟E』 對調試指令進行解析並從解析結果中獲取字節碼,判斷所述獲取的字節碼是否為特殊字節碼,是則執行步驟F』,否則結束本次操作,等待虛擬機下發指令; 步驟F』 判斷事件列表中的單步調試標誌是否置位,是則步驟G』,否則返回步驟H』 ; 步驟G』 根據所述獲取的字節碼從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I ; 步驟H』 根據特殊字節碼從事件列表中查找對應的原字節碼並用所述原字節碼替換所述特殊字節碼,從所述虛擬機中的調試數據中獲取返回數據,順序執行步驟I。
3.如權利要求I所述的方法,其特徵在於,所述步驟C替換為步驟C」; 步驟C」 從所述設置指令包頭的解析結果中獲取命令集和命令,如所述命令集為事件請求命令集且所述命令對應的事件類型為設置事件,從所述解析結果中獲取調節器,如是位置調節器則根據指令中的斷點位置信息從調試數據中讀取對應的原字節碼並保存,用特殊字節碼代替所述原字節碼;將所述斷點位置信息事件種類一起添加到斷點列表中,在事件列表中添加出棧事件生成事件序列號;如是單步調節器,則設置單步調試信息,將事件寫到事件列表中生成事件序列號;如所述命令對應的事件類型為其他事件則根據設置指令執行操作;如所述命令集為其他命令集則根據設置指令執行操作。
4.如權利要求1-3任意一項所述的方法,其特徵在於,所述步驟A中通過指令格式檢測指令類型,具體包括如所述指令的格式符合第一預設格式則為設置指令,如所述指令的格式符合APDU格式則為調試指令。
5.如權利要求1-3任意一項所述的方法,其特徵在於,所述步驟A中獲取指令包括從命令緩存中獲取指令或接收所述發送裝置發送的指令。
6.如權利要求1-3任意一項所述的方法,其特徵在於,在判斷所述請求標記是否為預設值之前包括 從所述設置指令包頭的解析結果中獲取指令長度,根據所述指令長度判斷所述設置指令是否完整,如完整則判斷所述設置指令是否為未處理指令,是則繼續,否則結束,如不完整則結束。
7.如權利要求6所述的方法,其特徵在於,所述根據所述指令長度判斷所述設置指令是否完整,具體為 所述判斷所述設置指令所佔字節是否與所述指令長度相符,是則所述設置指令完整,否則所述設置指令不完整。
8.如權利要求7所述的方法,其特徵在於,所述判斷所述請求標記是否為預設值,包括判斷所述獲取的請求標記是否為0x00,是則執行步驟E,否則給發送裝置返回提示信肩、O
9.如權利要求7所述的方法,其特徵在於,所述給發送裝置返回提示信息,具體包括從所述設置指令的請求標記之後讀取兩字節的數據,並將所述讀取的數據返回給發送裝置。
10.如權利要求9所述的方法,其特徵在於,所述步驟C具體包括 步驟Cl:從所述設置指令包頭的解析結果中獲取命令集和命令,並檢測所述命令集的類型,如是事件請求命令集,則執行步驟C2,否則根據其他命令集進行操作; 步驟C2 :判斷所述命令對應的事件類型,如是清除單個斷點事件,則執行步驟C3 ;如是清除所有斷點事件,則執行步驟C5 ;如是設置事件,則執行步驟CS ; 步驟C3 :對所述設置指令的數據部分進行解析,從所述設置指令數據部分的解析結果中獲取事件種類和事件請求ID,並根據所述事件種類和所述事件請求ID在事件列表中查找對應的事件,判斷是否找到匹配的事件,是則執行步驟C4,否則給發送裝置返回未找到匹配事件的信息; 步驟C4 :結束當前操作清空所述響應緩存中的數據;步驟C5 :在所述事件列表中查找所有斷點事件; 步驟C6 :清空所述事件列表中的所有斷點事件,並判斷是否清空完成,是則執行步驟C7,否則給發送裝置返回錯誤信息; 步驟C7 :清空所述響應緩存中的數據並結束當前操作; 步驟CS :從所述設置指令數據部分的解析結果中獲取事件種類和暫停政策; 步驟C9 :從所述設置指令數據部分的解析結果中獲取調節器個數,根據所述調節器個數分配事件處理需要的緩存; 步驟ClO :判斷所述調節器個數是否為0,是則給所述發送裝置返回錯誤信息,否則執行步驟Cll ; 步驟Cll :從所述設置指令數據部分的解析結果中獲取調節器的種類,如是位置調節器,則進行設置斷點操作;如是單步調節器,則進行設置單步操作;如是其他調節器,則進行其他調節器的操作;如不是調節器,則給發送裝置返回錯誤信息。
11.如權利要求10所述的方法,其特徵在於,所述步驟Cl中檢測所述命令集的類型具體包括判斷所述獲取的命令集的值是否為15,是則為事件請求命令集,否則為其他命令集。
12.如權利要求10所述的方法,其特徵在於,所述步驟C2具體包括檢測所述獲取的命令所對應的值,如是01則事件類型為設置事件,如是02則事件類型為清除事件,如是03則事件類型為清除所有斷點事件。
13.如權利要求10所述的方法,其特徵在於,所述步驟Cll中判斷調節器的種類,具體包括 檢測從所述設置指令數據部分的解析結果中的調解器個數之後獲取的值,如是8則為位置調節器,如是12則為單步調節器,如獲取的數據與預設值不符則不是調節器。
14.如權利要求10所述的方法,其特徵在於,所述步驟Cll中的進行設置斷點操作,包括 步驟C12 :從所述設置指令數據部分的的解析結果中獲取斷點位置信息並進行存儲,所述斷點位置信息包括引用類型標識、引用類型ID、函數ID和偏移信息; 步驟C13:根據所述引用類型標識、引用類型ID、函數ID和偏移信息在預先下載到所述虛擬機中的Java卡程序中查找對應的位置,讀取所述對應位置的原字節碼並保存,用特定字節碼替換所述對應位置的原字節碼; 步驟C14:將斷點信息和所述事件種類一起添加到斷點列表中,所述斷點信息包括所述原字節碼和斷點位置信息; 步驟C15:將事件寫入到事件列表中生成事件序列號,將所述事件序列號寫入到所述響應緩存的第一預設位置。
15.如權利要求14所述的方法,其特徵在於,所述步驟Cll中的進行設置單步操作,包括 步驟C16 :從所述設置指令數據部分的解析結果中獲取虛擬機線程ID、應用程式的單步指令方式和單步調試方式; 步驟C17 :判斷所述單步指令方式是否為第一指令方式或所述單步調試方式是否為單步進入,是則執行步驟C21,否則執行步驟C18 ;步驟C18 :從所述設置指令數據部分的解析結果中獲取當前運行的Java卡程序行對應的棧信息; 步驟C19 :判斷所述單步指令方式是否為第二指令方式,是則執行步驟C20,否則執行步驟C21 ; 步驟C20 :從所述設置指令數據部分的解析結果中獲取與所述棧信息對應的棧標號,順序執行步驟C21 ; 步驟C21 :判斷所述單步調試方式是否為單步進入,是則執行步驟C22,否則執行步驟C24 ; 步驟C22 :在所述事件列表中添加棧事件; 步驟C23 :將事件列表中的單步調試標誌置位; 步驟C24 :判斷所述設置單步操作的處理是否完成,是則執行步驟C25,否則給發送裝置返回錯誤信息; 步驟C25 :將所述獲取的虛擬機線程ID、單步指令方式、單步調試方式存儲於事件列表中,生成事件序列號並將所述事件序列號寫入到響應緩存的第一預設位置。
16.如權利要求15所述的方法,其特徵在於,所述步驟C23具體為將事件列表中的單步調試標誌的通知模式設置為I。
17.如權利要求15所述的方法,其特徵在於,所述步驟D根據預設規定在響應緩存中設置第一返回數據,包括 步驟Dl :在所述響應緩存的第二預設位置寫入與所述請求ID對應的響應ID和與所述請求標記匹配的響應標記; 步驟D2 :在所述響應緩存的第三預設位置寫入兩個字節的狀態碼,並判斷所述狀態碼是否為O,是則執行步驟D3,否則執行步驟D4 ; 步驟D3:在所述響應緩存的第四預設位置寫入操作結果的實際數據長度,順序執行步驟D5 ; 步驟D4:在所述響應緩存的第四預設位置寫入返回的最小數據長度,順序執行步驟D5 ; 步驟D5 :判斷所述響應緩存的第三預設位置上的數據長度是否大於O,是則將所述第一返回數據返回給發送裝置,並清空所述響應緩存中的第一返回數據,否則直接清空所述響應緩存中的第一返回數據。
18.如權利要求16所述的方法,其特徵在於,所述步驟F具體包括 步驟Fl :根據所述獲取的字節碼從所述虛擬機上的調試數據中獲取函數信息,根據所述函數信息從所述虛擬機上的調試數據中獲取所述字節碼的偏移信息; 步驟F2 :根據所述函數信息和所述偏移信息在斷點列表中查找對應的斷點信息,如找到則執行步驟F3,如未找到則返回步驟E ; 步驟F3 :從所述斷點信息中讀取與所述特殊字節碼對應的原字節碼; 步驟F4 :根據所述函數信息從所述虛擬機上的調試數據中獲取類信息,根據所述類信息從所述虛擬機上的調試數據中獲取類型標識,根據所述類型標識從所述虛擬機上的調試數據中讀取相應的籤名信息,根據所述籤名信息從所述虛擬機上的調試數據中獲取對應的返回數據;步驟F5 :用所述原字節碼替換所述虛擬機上當前運行的Java卡程序中的所述特殊字節碼。
19.如權利要求18所述的方法,其特徵在於,所述步驟F2具體包括 在所述斷點列表中的斷點信息中查找是否有與所述函數信息和所述特殊字節碼相對應的原字節碼,是則執行步驟F3,否則給所述發送裝置返回錯誤信息。
20.如權利要求17所述的方法,其特徵在於,所述步驟H具體包括 根據所述讀取的字節碼從所述虛擬機上的調試數據中讀取行信息,根據所述行信息從所述虛擬機上的調試數據中獲取函數信息,根據所述函數信息從所述虛擬機上的調試數據中獲取類信息,根據所述類信息從所述虛擬機上的調試數據中獲取引用類型標識,根據所述引用類型標識從所述虛擬機上的調試數據中獲取相應的籤名信息,根據所述籤名信息從所述虛擬機上的調試數據中獲取對應的返回數據。
21.如權利要求I所述的方法,其特徵在於,所述步驟G具體包括判斷事件列表中的單步調試標誌的通知模式是否為1,是則置位,否則未置位。
全文摘要
本發明公開一種JAVA卡調試信息的處理方法,包括獲取指令並檢測指令類型,如是未處理過的設置指令,如調節器是位置調節器則用特殊字節碼替換在虛擬機上運行的Java卡程序中的與位置信息相符的原字節碼,將原字節碼寫到事件列表中生成事件序列號;如是單步調節器,則設置單步調試信息,將事件寫到事件列表中生成事件序列號;如是調試指令,則獲取虛擬機上當前運行的Java卡程序的字節碼並判斷其是否為特殊字節碼,是則從事件列表中查找對應的原字節碼並用原字節碼替換特殊字節碼,獲取返回數據,否則當判斷事件列表中的單步調試標誌置位時,根據獲取的字節碼獲取返回數據。本發明使用方便、可實時監控和查看虛擬機調試過程。
文檔編號G06F11/36GK102855186SQ20121025865
公開日2013年1月2日 申請日期2012年7月24日 優先權日2012年7月24日
發明者陸舟, 於華章 申請人:飛天誠信科技股份有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀