Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 组件x86的反向工程片段?_C_Assembly_Att - Fatal编程技术网

C 组件x86的反向工程片段?

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

我正在尝试将此汇编代码转换为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) + 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)完全相同