逆向装配 x86 的工程片段?
Reversing engineering snippet of assembly x86?
我正在尝试将此汇编代码转换为 C 代码段。
movl [=10=], -4(%ebp) # 4
movl -4(%ebp), %eax
sall , %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
}
您对 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
}
我正在尝试将此汇编代码转换为 C 代码段。
movl [=10=], -4(%ebp) # 4
movl -4(%ebp), %eax
sall , %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
}
您对 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
}