x86-64加载有效地址汇编代码逆向工程

时间:2014-02-03 23:26:18

标签: assembly x86-64 disassembly

我正在尝试将一些汇编代码反向工程为C.我有以下的汇编代码,我试图破译:

lea 0x1(%rbx), %eax
add 0x0(%rbp, %rbx, 4), %eax
cmp %eax, 0x4(%rbp, %rbx,4)

我的逐行解释如下:

  • %eax =%rbx + 1
  • %eax =%rbp + 4 *%rbx + 0
  • 将%eax与%rbp + 4 *%rbx + 4
  • 进行比较

我知道六次迭代中的前三次分别产生1,2,4,但我无法弄清楚哪种公式产生了这些值。有人可以告诉我,我在解读这个问题时出了什么问题吗?

1 个答案:

答案 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)