2017-02-18 15 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 수준에서 수행하고 (패턴을 변경하여 수행 할 수 있음) 기계 명령 레벨이 모든 것을 다시 전환하기 때문에 멀리 떨어져 있지 않습니다. RA (잠재적으로 RA 이후) 기계 명령 레벨 패스를 작성하는 것이 좋습니다.

+0

감사합니다. Joky. "post-RA"란 무엇입니까? 기계 교육 과정을 어떻게 작성합니까? LLVM 프레임 워크를 사용할 수 있습니까? 이 방법에 대한 지침으로 나를 가르쳐 주시겠습니까? – Shuzheng

+0

RA 이후는 레지스터 할당 후를 의미합니다. 다음은 문서입니다. http://llvm.org/docs/WritingAnLLVMPass.html#the-machinefunctionpass-class; LLVM 코드베이스에서 MachineFunctionPass를 검색하여 여러 예제를 볼 것을 권장합니다. – Joky