Compiler construction 如何使用SSA表单处理数据流分析中的别名寄存器?(例如x86中的EAX/AX/AH/AL)
对于exmaple: 如何在中表示以下x86: 通过介绍一些伪函数,我得出:Compiler construction 如何使用SSA表单处理数据流分析中的别名寄存器?(例如x86中的EAX/AX/AH/AL),compiler-construction,x86,alias,dataflow,ssa,Compiler Construction,X86,Alias,Dataflow,Ssa,对于exmaple: 如何在中表示以下x86: 通过介绍一些伪函数,我得出: eax@1 = eax@0 ^ eax@0 ax@1 = LOWORD(eax@1) al@1 = LOBYTE(ax@1) ah@1 = HIBYTE(ax@1) hax@1 = HIWORD(eax@1) ax@2 = ax@1 + 1 eax@2 = MAKEDWORD(ax@2, HIWORD(eax@1)) al@2 = LOBYTE(ax@2) ah@2 = HIBYTE(ax@2) 但是我觉得用你的符
eax@1 = eax@0 ^ eax@0
ax@1 = LOWORD(eax@1)
al@1 = LOBYTE(ax@1)
ah@1 = HIBYTE(ax@1)
hax@1 = HIWORD(eax@1)
ax@2 = ax@1 + 1
eax@2 = MAKEDWORD(ax@2, HIWORD(eax@1))
al@2 = LOBYTE(ax@2)
ah@2 = HIBYTE(ax@2)
但是我觉得用你的符号太冗长了:
如果ebx的上16位不能控制下面的任何内容,您也可以删除第2步。您所说的“SSA形式”是什么意思?@Eli Bendersky:没有任何简化的建议,但我很好奇这是在哪里使用的。您是否正在尝试优化/转换现有的已编译应用程序?****看看上面的例子,您不需要在每一步都保持eax、ax、al和ah的同步吗。例如,如果下一条指令是一个条件分支,其中一条路径使用ax,另一条路径使用eax,该怎么办?然后,您需要更加详细地更新此注册表的所有版本@Gautham Ganapathy:我正在反编译(严重混淆)二进制文件。对于分支,SSA引入了phi函数,详情请参见wiki。是的,你说得对。我试图避免冗长,但冗长可能是SSA的特点。
eax@1 = eax@0 ^ eax@0
ax@1 = LOWORD(eax@1)
al@1 = LOBYTE(ax@1)
ah@1 = HIBYTE(ax@1)
hax@1 = HIWORD(eax@1)
ax@2 = ax@1 + 1
eax@2 = MAKEDWORD(ax@2, HIWORD(eax@1))
al@2 = LOBYTE(ax@2)
ah@2 = HIBYTE(ax@2)