了解如何翻译一些汇编代码

时间:2018-09-29 15:57:57

标签: c assembly binary

嗨,我目前正在做一枚二元炸弹,想知道我是否正确地理解了一些东西。我有这个;

   0x00000000004011d4 <+0>:     sub    $0x8,%rsp
   0x00000000004011d8 <+4>:     cmpb   $0x59,(%rdi)
   0x00000000004011db <+7>:     jne    0x4011fd <phase_1+41>
   0x00000000004011dd <+9>:     cmpb   $0x46,0x2(%rdi)
   0x00000000004011e1 <+13>:    jne    0x4011fd <phase_1+41>
   0x00000000004011e3 <+15>:    cmpb   $0x68,0x1(%rdi)
   0x00000000004011e7 <+19>:    je     0x40120b <phase_1+55>
   0x00000000004011e9 <+21>:    movsbl 0x10(%rdi),%ecx
   0x00000000004011ed <+25>:    movsbl 0x5(%rdi),%edx
   0x00000000004011f1 <+29>:    add    $0xb,%edx
   0x00000000004011f4 <+32>:    mov    $0x1,%eax
   0x00000000004011f9 <+37>:    cmp    %edx,%ecx
   0x00000000004011fb <+39>:    je     0x401210 <phase_1+60>
   0x00000000004011fd <+41>:    callq  0x401b20 <bomb_activation>
   0x0000000000401202 <+46>:    mov    $0xffffffffffffffff,%rax
   0x0000000000401209 <+53>:    jmp    0x401210 <phase_1+60>
   0x000000000040120b <+55>:    mov    $0x0,%eax
   0x0000000000401210 <+60>:    add    $0x8,%rsp
   0x0000000000401214 <+64>:    retq

到目前为止,我已经将其翻译成这个;

if(arr[0] != 'Y'){
bomb_activation();
}
if(arr[2] != 'F'){
bomb_activation();
}
if(arr[1] == 'h'){
bomb_activation();
}

int a = arr[10];
int b = arr[5];
b += 11;
status = 1;

if(t1 != t2){
bomb_activation();
}
return status;
}

您可能会说,我对如何准确地读取这些行感到非常困惑,我将其视为将数组的第10个元素移到ecx注册表中,并用0和相同的逻辑填充其余注册表edx,但是我不太确定如何仅由此确定arr [5]或arr [10]的值。

   0x00000000004011e9 <+21>:    movsbl 0x10(%rdi),%ecx
   0x00000000004011ed <+25>:    movsbl 0x5(%rdi),%edx
   0x00000000004011f1 <+29>:    add    $0xb,%edx
   0x00000000004011f4 <+32>:    mov    $0x1,%eax
   0x00000000004011f9 <+37>:    cmp    %edx,%ecx

更具体地说,我是如何确定数组大小的,也许我根本不了解它,但是任何帮助将非常感谢。

0 个答案:

没有答案