我正在尝试将一些汇编代码反向工程为C.我有以下的汇编代码,我试图破译:
lea 0x1(%rbx), %eax
add 0x0(%rbp, %rbx, 4), %eax
cmp %eax, 0x4(%rbp, %rbx,4)
我的逐行解释如下:
我知道六次迭代中的前三次分别产生1,2,4,但我无法弄清楚哪种公式产生了这些值。有人可以告诉我,我在解读这个问题时出了什么问题吗?
答案 0 :(得分:1)
您必须看到第二行和第三行包含内存访问。结果取决于存储在那里的值。
代码可以通过以下
粗略地翻译成C.unsigned char *rbp;
eax = ebx + 1
eax += *(rbp + rbx*4)
if (eax XXX *(rbp + rbx*4 + 4) ) ... (with XXX the comparison operator, depends
on the jmp instruction after the cmp)
或者如果你想将rbp视为长数组(从程序集中有意义)
unsigned long *rbp;
eax = ebx + 1;
eax += rbp[rbx];
if (eax XXX rbp[rbx+1] ) ... (with XXX the comparison operator, depends
on the jmp instruction after the cmp)