CSAPP bomb_lab:phase_5

phase_5的汇编代码

   0x0000000000401062 <+0>:     push   %rbx
   0x0000000000401063 <+1>:     sub    $0x20,%rsp
   0x0000000000401067 <+5>:     mov    %rdi,%rbx
   0x000000000040106a <+8>:     mov    %fs:0x28,%rax
   0x0000000000401073 <+17>:    mov    %rax,0x18(%rsp)
   0x0000000000401078 <+22>:    xor    %eax,%eax
   0x000000000040107a <+24>:    call   0x40131b 
   0x000000000040107f <+29>:    cmp    $0x6,%eax
   0x0000000000401082 <+32>:    je     0x4010d2 
   0x0000000000401084 <+34>:    call   0x40143a 
   0x0000000000401089 <+39>:    jmp    0x4010d2 
   0x000000000040108b <+41>:    movzbl (%rbx,%rax,1),%ecx
   0x000000000040108f <+45>:    mov    %cl,(%rsp)
   0x0000000000401092 <+48>:    mov    (%rsp),%rdx
   0x0000000000401096 <+52>:    and    $0xf,%edx
   0x0000000000401099 <+55>:    movzbl 0x4024b0(%rdx),%edx
   0x00000000004010a0 <+62>:    mov    %dl,0x10(%rsp,%rax,1)
   0x00000000004010a4 <+66>:    add    $0x1,%rax
   0x00000000004010a8 <+70>:    cmp    $0x6,%rax
   0x00000000004010ac <+74>:    jne    0x40108b 
   0x00000000004010ae <+76>:    movb   $0x0,0x16(%rsp)
   0x00000000004010b3 <+81>:    mov    $0x40245e,%esi
   0x00000000004010b8 <+86>:    lea    0x10(%rsp),%rdi
   0x00000000004010bd <+91>:    call   0x401338 
   0x00000000004010c2 <+96>:    test   %eax,%eax
   0x00000000004010c4 <+98>:    je     0x4010d9 
   0x00000000004010c6 <+100>:   call   0x40143a 
   0x00000000004010cb <+105>:   nopl   0x0(%rax,%rax,1)
   0x00000000004010d0 <+110>:   jmp    0x4010d9 
   0x00000000004010d2 <+112>:   mov    $0x0,%eax
   0x00000000004010d7 <+117>:   jmp    0x40108b 
   0x00000000004010d9 <+119>:   mov    0x18(%rsp),%rax
   0x00000000004010de <+124>:   xor    %fs:0x28,%rax
   0x00000000004010e7 <+133>:   je     0x4010ee 
   0x00000000004010e9 <+135>:   call   0x400b30 <__stack_chk_fail@plt--Type  for 
   0x00000000004010ee <+140>:   add    $0x20,%rsp
   0x00000000004010f2 <+144>:   pop    %rbx
   0x00000000004010f3 <+145>:   ret    

string_lengh 6说明输入为长度为6的字符串。

CSAPP bomb_lab:phase_5_第1张图片

最后结果应该是比较0x40245e中存放的字符串和 0x10(%rsp)存放的字符串是否相等。

使用x/s 0x40245e查看存放字符串,为flyers。

使用 p *(char *)($rsp+0x10)查看字符串,可以看到字符和输入的不一样。

CSAPP bomb_lab:phase_5_第2张图片

比如‘a’(97)的二进制 0110 0001,所以‘a’取低四位为1。

CSAPP bomb_lab:phase_5_第3张图片

movzbl把0x4024b0+字符的第四位表示的整数 放到%edx。

使用x/s查看0x4024b0存放的字符串。

所以需要凑出flyers。

对应分别是+9 +15 +14 +5 +6 +7,所以输入为ionefg

你可能感兴趣的:(服务器,linux,前端)