For loop from assembly to C

Posted by FranXh on Stack Overflow See other posts from Stack Overflow or by FranXh
Published on 2012-10-29T04:39:09Z Indexed on 2012/10/29 5:01 UTC
Read the original article Hit count: 389

Filed under:
|
|

I have a bomb project where I need to defuse certain phases by finding "pas phrases" that will defuse the bomb. Right now I have been working with phase_2, for which the assembly code is shown below.

Phase_2 requires as an input 6 numbers, which I need to find in order to defuse this phase. I analyzed this assembly, and I came up with the C code below, that covers lines from 40101c to 401044. It is basically a for loop that makes sure that elements t[0]==t[3], t[1]==t[4] and t[2]==t[5] that the user inputs, are equal. According to my logic, the user can input any 6 numbers as long as the above condition is satisfied. Say 1, 2, 3, 1, 2, 3 would be a valid "pas phrase". However this solution does not convince me for some reason. Am I doing something wrong?

0000000000400ffc <phase_2>:
  400ffc:        48 89 5c 24 e0               mov    %rbx,-0x20(%rsp)
  401001:        48 89 6c 24 e8               mov    %rbp,-0x18(%rsp)
  401006:        4c 89 64 24 f0               mov    %r12,-0x10(%rsp)
  40100b:        4c 89 6c 24 f8               mov    %r13,-0x8(%rsp)
  401010:        48 83 ec 48                  sub    $0x48,%rsp
  401014:        48 89 e6                     mov    %rsp,%rsi
  401017:        e8 65 0a 00 00               callq  401a81 <read_six_numbers>
  40101c:        48 89 e5                     mov    %rsp,%rbp
  40101f:        4c 8d 6c 24 0c               lea    0xc(%rsp),%r13
  401024:        41 bc 00 00 00 00            mov    $0x0,%r12d
  40102a:        48 89 eb                     mov    %rbp,%rbx
  40102d:        8b 45 0c                     mov    0xc(%rbp),%eax
  401030:        39 45 00                     cmp    %eax,0x0(%rbp)
  401033:        74 05                        je     40103a <phase_2+0x3e>
  401035:        e8 2d 09 00 00               callq  401967 <_GLOBAL_RESET_>
  40103a:        44 03 23                     add    (%rbx),%r12d
  40103d:        48 83 c5 04                  add    $0x4,%rbp
  401041:        4c 39 ed                     cmp    %r13,%rbp
  401044:        75 e4                        jne    40102a <phase_2+0x2e>
  401046:        45 85 e4                     test   %r12d,%r12d
  401049:        75 05                        jne    401050 <phase_2+0x54>
  40104b:        e8 17 09 00 00               callq  401967 <_GLOBAL_RESET_>
  401050:        48 8b 5c 24 28               mov    0x28(%rsp),%rbx
  401055:        48 8b 6c 24 30               mov    0x30(%rsp),%rbp
  40105a:        4c 8b 64 24 38               mov    0x38(%rsp),%r12
  40105f:        4c 8b 6c 24 40               mov    0x40(%rsp),%r13
  401064:        48 83 c4 48                  add    $0x48,%rsp
  401068:        c3  


for (int i=0; i<3; i++){
   if(t[i] != t[i+3]){
    explode();
   }
}

© Stack Overflow or respective owner

Related posts about c

    Related posts about assembly