2017-02-18 51 views
1

我想申請一個算法,水印,基本上重新排序編程語言的同義術語:通過重新編號對水印進行LLVM IR的等價術語?

https://books.google.dk/books?id=mig-bH3u0Z0C&pg=PT595&lpg=PT595&dq=obfuscation+renumbering+register&source=bl&ots=b3vMhp-yTq&sig=RERdnDNewRqBi7ZmSNMlsnPy-Hw&hl=da&sa=X&ved=0ahUKEwiLw-zWrpnSAhWEHJoKHXCpAkMQ6AEIGTAA#v=onepage&q=obfuscation%20renumbering%20register&f=false

說,T1, T2,...,Tn是語言的等價的術語,那麼水印是置換f這樣f(Ti) = Tj

在這種情況下,編程語言是LLVM IR,它是一種中間語言。

這本書給出了一個應用排列重新編號寄存器的例子。但是,寄存器不屬於LLVM IR的範圍,因爲它們是較低級別的細節?

我一直在想LLVM的等價術語,但不能拿出一些。越好越好,因爲這意味着更加靈活的水印程度。

你能想到LLVM IR的等價條款,以便每個條款都可以替代其他條款嗎?或者只能在機器碼級別進行這種水印處理?

回答

0

即使您在IR級別執行此操作(並且您可以通過更改模式),但由於機器指令級別會重新組合所有內容,因此您不會走得太遠。你最好寫一個(潛在的後期)機器指令級別通行證。

+0

謝謝Joky。什麼是「後RA」?我將如何編寫機器指令通行證?這可能使用LLVM框架嗎?你能指出我如何做到這一點? – Shuzheng

+0

後-RA表示寄存器分配後。這裏是文檔:http://llvm.org/docs/WritingAnLLVMPass.html#the-machinefunctionpass-class;我建議您在LLVM代碼庫中搜索MachineFunctionPass以查看它的多個示例。 – Joky