我目前正在使用radare2来构建一个简单的CFG,该图中的每个块/节点都由一个或多个汇编指令组成,我希望尽可能估计特定寄存器或堆栈位置的值。
几个例子:
示例 1:
xor rax, rax
inc rax
; Given these instructions, solve(rax) => 1
示例 2:
mov rcx, 3
mov rbx, rcx
mov rax, rbx
; Given the instructions above, solve(rax) => 3
示例 3:
mov rbx, rcx
mov rax, rbx
; Given the instructions above, solve(rax) => Unknown
示例 4:
mov rdx, 1
shl rdx, 2
add rdx, 3
mov [rsp], rdx
; Given the instructions above, solve([rsp]) => 7
我正在寻找一个简单的 Python 示例作为开始,它要么直接获取操作码,要么寻址并评估/解决特定的寄存器/堆栈位置。
我已经研究了一些符号执行示例,它们看起来像我所需要的,但我对此很陌生,因此一个简单的工作示例确实会有所帮助。