亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

程序的重寫方法和裝置與流程

文檔序號:12270962閱讀:來源:國知局

技術特征:

1.一種程序的重寫方法,其特征在于,包括:

為待處理程序中的間接跳轉指令的目標寄存器構建跳板代碼,獲得跳板代碼段,所述跳板代碼用于將所述間接跳轉指令對應的程序計數器PC值約束在Kseg0內;

將所述跳板代碼段添加至所述待處理程序的地址空間的起始位置,獲得新版本程序和映射表;其中,所述映射表包括所述跳板代碼在所述新版本程序中的地址與所述間接跳轉指令的目標寄存器之間的映射關系;

根據所述映射表,將所述新版本程序中位于所述跳板代碼之外的間接跳轉指令的目標寄存器修改為所述跳板代碼在所述新版本程序中的地址,獲得改寫后的新版本程序,以使處理器在執(zhí)行到所述位于所述跳板代碼之外的間接跳轉指令所在的地址時,跳轉執(zhí)行所述跳板代碼。

2.根據權利要求1所述的方法,其特征在于,所述跳板代碼包括第一跳板代碼和/或第二跳板代碼,所述間接跳轉指令包括第一間接指令和/或第二間接跳轉指令,所述第一間接跳轉指令對應的目標寄存器為R1寄存器,所述第二間接跳轉指令對應的目標寄存器為第一寄存器;

所述為待處理程序中的間接跳轉指令的目標寄存器構建跳板代碼,獲得跳板代碼段,所述跳板代碼用于將所述間接跳轉指令對應的程序計數器PC值約束在Kseg0內,包括:

為所述第一間接跳轉指令對應的R1寄存器構建所述第一跳板代碼,獲得所述跳板代碼段;或者,

為所述第二間接跳轉指令對應的第一寄存器構建所述第二跳板代碼,獲得所述跳板代碼段;或者,

為所述第一間接跳轉指令對應的R1寄存器構建所述第一跳板代碼,以及,為所述第二間接跳轉指令對應的第一寄存器構建所述第二跳板代碼,并根據所述第一跳板代碼和所述第二跳板代碼,獲得所述跳板代碼段;

其中,所述第一跳板代碼用于將所述第一間接跳轉指令對應的位于所述R1寄存器中的第一PC值約束在Kseg0內;所述第二跳板代碼用于將所述第二間接跳轉指令對應的位于所述第一寄存器中的第二PC值約束在Kseg0內。

3.根據權利要求2所述的方法,其特征在于,所述映射表包括所述跳板 代碼在所述新版本程序中的地址與所述間接跳轉指令的目標寄存器之間的映射關系,具體為:

所述映射表包括所述第一跳板代碼在所述新版本程序中的地址與所述R1寄存器的對應關系,和/或,所述第二跳板代碼在所述新版本程序中的地址與所述第一寄存器的對應關系。

4.根據權利要求3所述的方法,其特征在于,所述位于所述跳板代碼之外的間接跳轉指令包括:位于所述第一跳板代碼之外的第三間接跳轉指令,和/或,位于所述第二跳板代碼之外的第四間接跳轉指令;其中,所述第三間接跳轉指令與所述第一間接跳轉指令的指令內容相同,且所述第三間接跳轉指令的目標寄存器為R1寄存器,所述第四間接跳轉指令與所述第二間接跳轉指令的指令內容相同,且所述第四間接跳轉指令的目標寄存器為第一寄存器;

所述根據所述映射表,將所述新版本程序中位于所述跳板代碼之外的間接跳轉指令的目標寄存器修改為所述跳板代碼在所述新版本程序中的地址,獲得改寫后的新版本程序,以使處理器在執(zhí)行到所述位于所述跳板代碼之外的間接跳轉指令時跳轉執(zhí)行所述跳板代碼段,包括:

根據所述映射表,將所述新版本程序中所述第三間接跳轉指令的目標寄存器修改為所述第一跳板代碼在所述新版本程序中的地址,獲得所述改寫后的新版本程序,以使所述處理器在執(zhí)行到所述第三間接跳轉指令所在的地址時跳轉執(zhí)行所述第一跳板代碼;或者,

根據所述映射表,將所述新版本程序中所述第四間接跳轉指令的目標寄存器修改為所述第二跳板代碼在所述新版本程序中的地址,獲得所述改寫后的新版本程序,以使所述處理器執(zhí)行到所述第四間接跳轉指令所在的地址時跳轉執(zhí)行所述第二跳板代碼;或者,

根據所述映射表,將所述新版本程序中所述第三間接跳轉指令的目標寄存器修改為所述第一跳板代碼在所述新版本程序中的地址,并將所述新版本程序中所述第四間接跳轉指令的目標寄存器修改為所述第二跳板代碼在所述新版本程序中的地址,獲得所述改寫后的新版本程序,以使處理器在執(zhí)行到所述第三間接跳轉指令所在的地址時跳轉執(zhí)行所述第一跳板代碼,以及,在所述處理器執(zhí)行到所述第四間接跳轉指令所在的地址時跳轉執(zhí)行所述第二跳板代碼。

5.根據權利要求1-4任一項所述的方法,其特征在于,所述第一跳板代碼用于將所述第一間接跳轉指令對應的位于所述R1寄存器中的第一PC值約束在Kseg0內,具體為:

所述第一跳板代碼,用于確定所猜測的所述第一PC值是否正確,以將所述第一PC值約束在Kseg0內。

6.根據權利要求5所述的方法,其特征在于,所述第一跳板代碼包括至少一條空指令和所述第一間接跳轉指令;所述空指令用于確定所猜測的第一PC值是否正確;所述方法還包括:

執(zhí)行所述改寫后的新版本程序,并當執(zhí)行到所述第三間接跳轉指令所在的地址時,跳轉執(zhí)行所述第一跳板代碼;

當執(zhí)行所述空指令后確定所猜測的第一PC值正確時,繼續(xù)執(zhí)行所述第一跳板代碼中的所述第一間接跳轉指令;

當執(zhí)行所述空指令后確定所猜測的第一PC值錯誤時,回退至所述第一跳板代碼在所述新版本程序中的地址上,以重新執(zhí)行所述第一跳板代碼。

7.根據權利要求1-4任一項所述的方法,其特征在于,所述第二跳板代碼包括按位與指令和第二間接跳轉指令;

所述第二跳板代碼用于將所述第二間接跳轉指令對應的位于所述第一寄存器中的第二PC值約束在Kseg0內,具體為:

所述按位與指令,用于將所述R1寄存器中的立即數0xDFFF,FFFF與所述第二間接跳轉指令對應的第一寄存器的地址空間進行按位與,以將所述第二PC值約束在Kseg0內。

8.根據權利要求2所述的方法,其特征在于,所述根據所述第一跳板代碼和所述第二跳板代碼,獲得所述跳板代碼段,具體包括:

將所述第一跳板代碼和所述第二跳板代碼按照所對應的寄存器編號從小到大排列,獲得所述跳板代碼段。

9.根據權利要求4所述的方法,其特征在于,所述第一間接跳轉指令為jr reg1或jalr reg1,所述第二間接跳轉指令為jr regN或jalr regN,所述N為大于1小于等于31的正整數,所述第一跳板代碼在所述新版本程序中的地址為StubR1,所述第二跳板代碼在所述新版本程序中的地址為StubRN;

則所述根據所述映射表,將所述新版本程序中第三間接跳轉指令的目標 寄存器修改為所述第一跳板代碼在所述新版本程序中的地址,具體包括:

根據所述映射表,將所述新版本程序中第三間接跳轉指令jr reg1中的reg1修改為StubR1,或者,將jalr reg1中的reg1修改為StubR1;

所述根據所述映射表,將所述新版本程序中第四間接跳轉指令的目標寄存器修改為所述第二跳板代碼在所述新版本程序中的地址,具體包括:

將所述新版本程序中第四間接跳轉指令jr regN中的regN修改為StubRN,或者,將jalr regN中的regN修改為StubRN。

10.根據權利要求9所述的方法,其特征在于,當所述第一寄存器為RN時,所述第二跳板代碼中的第二間接跳轉指令為jr regN或jalr regN。

11.一種程序的重寫裝置,其特征在于,包括:

跳板代碼構建模塊,用于為待處理程序中的間接跳轉指令的目標寄存器構建跳板代碼,獲得跳板代碼段,所述跳板代碼用于將所述間接跳轉指令對應的程序計數器PC值約束在Kseg0內;

第一獲取模塊,用于將所述跳板代碼構建獲取模塊所獲得的跳板代碼段添加至所述待處理程序的地址空間的起始位置,獲得新版本程序和映射表;其中,所述映射表包括所述跳板代碼在所述新版本程序中的地址與所述間接跳轉指令的目標寄存器之間的映射關系;

第二獲取模塊,用于根據所述第一獲取模塊獲得的所述映射表,將所述新版本程序中位于所述跳板代碼之外的間接跳轉指令的目標寄存器修改為所述跳板代碼在所述新版本程序中的地址,獲得改寫后的新版本程序,以使處理器在執(zhí)行到所述位于所述跳板代碼之外的間接跳轉指令所在的地址時,跳轉執(zhí)行所述跳板代碼。

12.根據權利要求11所述的裝置,其特征在于,所述跳板代碼包括第一跳板代碼和/或第二跳板代碼,所述間接跳轉指令包括第一間接指令和/或第二間接跳轉指令,所述第一間接跳轉指令對應的目標寄存器為R1寄存器,所述第二間接跳轉指令對應的目標寄存器為第一寄存器;

所述跳板代碼構建模塊,具體用于為所述第一間接跳轉指令對應的R1寄存器構建所述第一跳板代碼,獲得所述跳板代碼段;

或者,所述跳板代碼構建模塊,具體用于為所述第二間接跳轉指令對應的第一寄存器構建所述第二跳板代碼,獲得所述跳板代碼段;

或者,所述跳板代碼構建模塊,具體用于為所述第一間接跳轉指令對應的R1寄存器構建所述第一跳板代碼,以及,為所述第二間接跳轉指令對應的第一寄存器構建所述第二跳板代碼,并根據所述第一跳板代碼和所述第二跳板代碼,獲得所述跳板代碼段;

其中,所述第一跳板代碼用于將所述第一間接跳轉指令對應的位于所述R1寄存器中的第一PC值約束在Kseg0內;所述第二跳板代碼用于將所述第二間接跳轉指令對應的位于所述第一寄存器中的第二PC值約束在Kseg0內。

13.根據權利要求12所述的裝置,其特征在于,所述映射表包括所述跳板代碼在所述新版本程序中的地址與所述間接跳轉指令的目標寄存器之間的映射關系,具體為:

所述映射表包括所述第一跳板代碼在所述新版本程序中的地址與所述R1寄存器的對應關系,和/或,所述第二跳板代碼在所述新版本程序中的地址與所述第一寄存器的對應關系。

14.根據權利要求13所述的裝置,其特征在于,所述位于所述跳板代碼之外的間接跳轉指令包括:位于所述第一跳板代碼之外的第三間接跳轉指令,和/或,位于所述第二跳板代碼之外的第四間接跳轉指令;其中,所述第三間接跳轉指令與所述第一間接跳轉指令的指令內容相同,且所述第三間接跳轉指令的目標寄存器為R1寄存器,所述第四間接跳轉指令與所述第二間接跳轉指令的指令內容相同,且所述第四間接跳轉指令的目標寄存器為第一寄存器;

則所述第二獲取模塊,具體用于根據所述第一獲取模塊獲得的所述映射表,將所述新版本程序中所述第三間接跳轉指令的目標寄存器修改為所述第一跳板代碼在所述新版本程序中的地址,獲得所述改寫后的新版本程序,以使所述處理器在執(zhí)行到所述第三間接跳轉指令所在的地址時跳轉執(zhí)行所述第一跳板代碼;

或者,所述第二獲取模塊,具體用于根據所述第一獲取模塊獲得的所述映射表,將所述新版本程序中所述第四間接跳轉指令的目標寄存器修改為所述第二跳板代碼在所述新版本程序中的地址,獲得所述改寫后的新版本程序,以使所述處理器執(zhí)行到所述第四間接跳轉指令所在的地址時跳轉執(zhí)行所述第二跳板代碼;

或者,所述第二獲取模塊,具體用于根據所述第一獲取模塊獲得的所述 映射表,將所述新版本程序中所述第三間接跳轉指令的目標寄存器修改為所述第一跳板代碼在所述新版本程序中的地址,并將所述新版本程序中所述第四間接跳轉指令的目標寄存器修改為所述第二跳板代碼在所述新版本程序中的地址,獲得所述改寫后的新版本程序,以使處理器在執(zhí)行到所述第三間接跳轉指令所在的地址時跳轉執(zhí)行所述第一跳板代碼,以及,在所述處理器執(zhí)行到所述第四間接跳轉指令所在的地址時跳轉執(zhí)行所述第二跳板代碼。

15.根據權利要求11-14任一項所述的裝置,其特征在于,所述第一跳板代碼用于將所述第一間接跳轉指令對應的位于所述R1寄存器中的第一PC值約束在Kseg0內,具體為:

所述第一跳板代碼,用于確定所猜測的所述第一PC值是否正確,以將所述第一PC值約束在Kseg0內。

16.根據權利要求15所述的裝置,其特征在于,所述第一跳板代碼包括至少一條空指令和所述第一間接跳轉指令;所述空指令用于確定所猜測的第一PC值是否正確;所述裝置還包括:

處理模塊,用于執(zhí)行所述改寫后的新版本程序,并當執(zhí)行到所述第三間接跳轉指令所在的地址時,跳轉執(zhí)行所述第一跳板代碼;

判斷執(zhí)行模塊,用于在執(zhí)行所述空指令后確定所猜測的第一PC值正確時,指示所述處理模塊繼續(xù)執(zhí)行所述第一跳板代碼中的所述第一間接跳轉指令;并用于在執(zhí)行所述空指令后確定所猜測的第一PC值錯誤時,指示所述處理模塊回退至所述第一跳板代碼在所述新版本程序中的地址上,以重新執(zhí)行所述第一跳板代碼。

17.根據權利要求11-14任一項所述的裝置,其特征在于,所述第二跳板代碼包括按位與指令和第二間接跳轉指令;

所述第二跳板代碼用于將所述第二間接跳轉指令對應的位于所述第一寄存器中的第二PC值約束在Kseg0內,具體為:

所述按位與指令,用于將所述R1寄存器中的立即數0xDFFF,FFFF與所述第二間接跳轉指令對應的第一寄存器的地址空間進行按位與,以將所述第二PC值約束在Kseg0內。

18.根據權利要求12所述的裝置,其特征在于,所述跳板代碼構建模塊,具體用于根據所述第一跳板代碼和所述第二跳板代碼,獲得所述跳板代碼段, 具體為:

所述跳板代碼構建模塊,具體用于將所述第一跳板代碼和所述第二跳板代碼按照所對應的寄存器編號從小到大排列,獲得所述跳板代碼段。

19.根據權利要求14所述的裝置,其特征在于,所述第一間接跳轉指令為jr reg1或jalr reg1,所述第二間接跳轉指令為jr regN或jalr regN,所述N為大于1小于等于31的正整數,所述第一跳板代碼在所述新版本程序中的地址為StubR1,所述第二跳板代碼在所述新版本程序中的地址為StubRN

所述第二獲取模塊,具體用于根據所述映射表,將所述新版本程序中第三間接跳轉指令jr reg1中的reg1修改為StubR1,或者,將jalr reg1中的reg1修改為StubR1;以及,具體用于將所述新版本程序中第四間接跳轉指令jr regN中的regN修改為StubRN,或者,將jalr regN中的regN修改為StubRN。

20.根據權利要求19所述的裝置,其特征在于,當所述第一寄存器為RN時,所述第二跳板代碼中的第二間接跳轉指令為jr regN或jalr regN。

當前第2頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1