0

I am currently working on famous System Programming problem, "Bomb lab" phase2. When I disassembled phase_2 with gdb, code looks like this...

Phase_2

    0x00005555555555cb <+0>:    endbr64
    0x00005555555555cf <+4>:    push   %rbp
    0x00005555555555d0 <+5>:    push   %rbx
    0x00005555555555d1 <+6>:    sub    $0x28,%rsp
    0x00005555555555d5 <+10>:    mov    %fs:0x28,%rax
    0x00005555555555de <+19>:    mov    %rax,0x18(%rsp)
    0x00005555555555e3 <+24>:    xor    %eax,%eax
    0x00005555555555e5 <+26>:    mov    %rsp,%rsi
    0x00005555555555e8 <+29>:    callq  0x555555555bd5 <read_six_numbers>
    0x00005555555555ed <+34>:    cmpl   $0x0,(%rsp)
    0x00005555555555f1 <+38>:    js     0x5555555555fd <phase_2+50>
    0x00005555555555f3 <+40>:    mov    %rsp,%rbp
    0x00005555555555f6 <+43>:    mov    $0x1,%ebx
    0x00005555555555fb <+48>:    jmp    0x555555555615 <phase_2+74>
    0x00005555555555fd <+50>:    callq  0x555555555ba9 <explode_bomb>
    0x0000555555555602 <+55>:    jmp    0x5555555555f3 <phase_2+40>
    0x0000555555555604 <+57>:    callq  0x555555555ba9 <explode_bomb>
    0x0000555555555609 <+62>:    add    $0x1,%ebx
    0x000055555555560c <+65>:    add    $0x4,%rbp
    0x0000555555555610 <+69>:    cmp    $0x6,%ebx
    0x0000555555555613 <+72>:    je     0x555555555621 <phase_2+86>
    0x0000555555555615 <+74>:    mov    %ebx,%eax
    0x0000555555555617 <+76>:    add    0x0(%rbp),%eax
    0x000055555555561a <+79>:    cmp    %eax,0x4(%rbp)
    0x000055555555561d <+82>:    je     0x555555555609 <phase_2+62>
    0x000055555555561f <+84>:    jmp    0x555555555604 <phase_2+57>
    0x0000555555555621 <+86>:    mov    0x18(%rsp),%rax
    0x0000555555555626 <+91>:    xor    %fs:0x28,%rax
    0x000055555555562f <+100>:    jne    0x555555555638 <phase_2+109>
    0x0000555555555631 <+102>:    add    $0x28,%rsp
    0x0000555555555635 <+106>:    pop    %rbx
    0x0000555555555636 <+107>:    pop    %rbp
    0x0000555555555637 <+108>:    retq  
    0x0000555555555638 <+109>:    callq  0x555555555220 <__stack_chk_fail@plt>  

I guess that in line <+62>, %ebx means index, and increments the value until the value is 6 (by line <+69>). But I don't really understand lines such as

     0x000055555555560c <+65>:    add    $0x4,%rbp

or

     0x0000555555555615 <+74>:    mov    %ebx,%eax
     0x0000555555555617 <+76>:    add    0x0(%rbp),%eax
     0x000055555555561a <+79>:    cmp    %eax,0x4(%rbp)

I guess it is probably related to features of sequence that I have to find, but I don't understand why values such as 0x4(%rbp)is compared with %eax etc... Can someone explain?

  • 1
    Does this answer your question? [Why are rbp and rsp called general purpose registers?](https://stackoverflow.com/questions/36529449/why-are-rbp-and-rsp-called-general-purpose-registers) – Lior Kogan May 18 '20 at 08:08
  • I solved it. Thanks for your help:) – Martin Jones May 18 '20 at 08:56

0 Answers0