C 组件x86的反向工程片段?
我正在尝试将此汇编代码转换为C代码段C 组件x86的反向工程片段?,c,assembly,att,C,Assembly,Att,我正在尝试将此汇编代码转换为C代码段 movl $0, -4(%ebp) # 4 movl -4(%ebp), %eax sall $2, %eax addl 8(%ebp), %eax movl (%eax), %eax cmpl 12(%ebp), %eax jg .L6 .L6: nop 这是我到目前为止的情况,但我认为有些地方不对劲。“movl(%eax),eax”一行让我特别困惑 int local = 0; if ((int*)((local << 2) + par
movl $0, -4(%ebp) # 4
movl -4(%ebp), %eax
sall $2, %eax
addl 8(%ebp), %eax
movl (%eax), %eax
cmpl 12(%ebp), %eax
jg .L6
.L6:
nop
这是我到目前为止的情况,但我认为有些地方不对劲。“movl(%eax),eax”一行让我特别困惑
int local = 0;
if ((int*)((local << 2) + param1) > parameter2) {
; // do nothing
}
int local=0;
if((int*)((本地参数2){
;//什么也不做
}
您对movl%(eax),%eax
的解释是正确的,但行addl 8(%ebp),%eax
的解释是不正确的。正确的代码如下所示:
// parameter1 is an int* at 8(%ebp)
// parameter2 is an int at 12(%ebp)
int local = 0; // at -4(%ebp)
if (parameter1[local] > parameter2) {
; // nop
} else {
// whatever is betwween jg and .L6
}
除非我们看到整个上下文,否则这有点没用。可能有一些分支循环回到了这段代码中。非常感谢,但是为什么我对addl的解释是错误的?我想那只是说eax=eax+param2param1,而不是param2。在你的c代码中,你有“+2”,这是错误的-它是“+param1”。非常感谢您的帮助,但是如果您不介意的话,您能解释一下为什么您知道它的参数[local]而不是我写的所有东西吗?
parameter1[local]
实际上与*(int*)((local)完全相同