我正在研究一个名为 VMProtect 的代码虚拟化解决方案,它创建一个带有虚拟指令集的自定义堆栈机器来混淆代码。我想做的是将每个虚拟机指令处理程序(其中大部分由基于堆栈的操作组成)提升到 LLVM IR,然后应用优化并重新编译。
我将为此使用 llvm 的 IRBuilder。
我的一些问题是:
- 如何在 IR 中表示 push/pop
- 像这样的处理程序在 IR 中会是什么样子
mov rdx, [rbp] ; get virtual stack operand
add rbp, 8 ; add to stack pointer
mov [rax+rdi], rdx ; move to scratch space