2017-02-18 34 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

Say, T1, T2,...,Tn являются эквивалентными терминами языка, то водяной знак является перестановкой f таким образом, что f(Ti) = Tj.

В этом случае языком программирования является LLVM IR, который является промежуточным языком.

В книге приведен пример перенумерации регистров путем применения перестановки. Однако регистры не входят в сферу LLVM IR, поскольку они представляют собой детали более низкого уровня?

Я думал об эквивалентных условиях LLVM, но не могу придумать некоторые из них. Чем больше, тем лучше, поскольку это означает более гибкую степень водяного знака.

Можете ли вы представить себе эквивалентные условия LLVM IR, чтобы каждый мог быть заменен другим? Или это возможно только для водяного знака на уровне машинного кода?

ответ

0

Даже если вы выполните это на уровне IR (и вы можете, изменив шаблоны), вы не уйдете далеко, так как уровень машинной команды перетасовал бы все. Вам лучше написать пропуск уровня машинной инструкции (потенциально пост-РА).

+0

Спасибо Joky. Что такое «пост-РА»? Как я могу написать пропуск машинной инструкции? Возможно ли это с использованием структуры LLVM? Не могли бы вы указать мне, как это сделать? – Shuzheng

+0

после RA означает после распределения регистров. Вот документ: http://llvm.org/docs/WritingAnLLVMPass.html#the-machinefunctionpass-class; и я советую вам искать в базе LLVM для MachineFunctionPass, чтобы увидеть несколько примеров этого. – Joky

 Смежные вопросы

  • Нет связанных вопросов^_^