簡體   English   中英

java字節碼確定性指令

[英]java bytecode deterministic instructions

我需要自動查找 Java 字節碼中確定執行的所有指令。 偽代碼中的模擬示例:

x=a; //will be executed for sure
y=b; //will be executed for sure
if(x>y) //will be executed for sure
 x++; //might not be executed
else
 y++; //might not be executed
k=4; //will be executed for sure

一種可能的解決方案可能是創建一個控制流圖並在那里找到確定性路徑。 (圖論?)根據例子:

x=a;
y=b;
if(x>y)
 |   \
 |    \
x++;  y++;
 |    /
 |   /
k=4;

您知道如何找到此任務的解決方案嗎?

更新:既然提問者的實際問題已經暴露,這是我更新的答案。

首先,不需要確定“始終執行”的指令。 如果您查看該論文,它指的是使用一個特定輸入執行程序時的指令跟蹤。 要找到指令,只需使用該輸入執行程序並記錄執行了哪些指令(當然,這假設程序純粹是功能性的,這是論文中的許多問題之一)。

不過,最大的問題是您為什么要實現這一點。 根據我對論文的理解,這不是一種非常有用或有趣的混淆+水印技術。 而在 Java 中實現它只會讓情況變得更糟。

如果你只是為了好玩而實現它,那就讓自己筋疲力盡,但如果你只是想要一個 Java 水印工具,我會看看像 Sandmark 這樣的現有項目。

原答案

沒有保證會執行的指令,因為多虧了Thread.stop() ,執行可能會在任何時候停止。

為了進行有意義的分析,您必須忽略某些類型的錯誤。 例如,Krakatau 忽略了Thread.stop以及大多數VirtualMachineErrors的可能性。

在這一點上,這只是遵循控制流的問題。 我不確定你的問題是什么。 如果您解釋您要完成的工作以及項目要求是什么,我可能會推薦一個工具。

編輯:如果您試圖找到保證在運行時由程序執行而不是由靜態分析保證的所有指令,那當然是一個棘手的問題。 事實上,這是無法確定的。 而且我不確定這個用例是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM