将装配转换为C.

时间:2014-11-17 01:21:51

标签: c assembly x86 reverse-engineering

我现在正在审查一个练习期中考试。这个问题给出了一段汇编代码(IA32),并指示编写它的C等价物。只是想确保我正确地做到了。谢谢!

给出的汇编程序:

.global _someOperation
_someOperation:
    pushl %ebp
    movl %esp, %ebp
    movl 8(%ebp), %ebx
    movl 12(%ebp), %edx
    decl %edx
    xorl %esi, %esi
    movl (%ebx, %esi, 4), %eax
continue:
    incl %esi
    cmpl (%ebx, %esi, 4), %eax
    jl thelabel
    movl (%ebx, %esi, 4), %eax
thelabel:
    cmp %esi, %edx
    jne continue
    movl %ebp, %esp
    popl %ebp
    ret

这是我写的代码:

void someOperation(int *num, int count)  //Given
{
    int k; //Given
    count--;
    int i = 0;
    k = num[i];
    i++;
    while(count != i)
    {
        if(k >= num[i]
            k = num[i];
        i++;
    }
    return (k);
 }

1 个答案:

答案 0 :(得分:2)

看起来非常接近我,虽然在ASM中增量仅在循环开始时,并且第一次不检查条件。考虑使用DO ... WHILE代替。

编辑:同样,你的作业是错误的。 MOV指令从第二个参数复制到第一个参数。你可以在C代码中使用它。