바이너리 폭탄 프로젝트를 진행 중입니다. 이 코드를 작성 중이며 어셈블리 코드의 일부를 이해하려고합니다. 따라서 phase1을 쉽게 통과하고 2 단계에서는 4 문자를 입력해야합니다. 내가 국내 총생산 (GDP)이 실행하고 나는 다음을 얻을 어셈블리 코드를 검사 할 때 내 네 문자바이너리 폭탄 2 단계 어셈블리 코드 이해
을 같이 ABCD : 내가 입력을 사용 아래 phase-2: x y z d
예에서 예를 들면 다음과 같습니다
난 정말 무엇을 이해하는 무엇Dump of assembler code for function phase2:
0x080487d6 <+0>: push %ebp
0x080487d7 <+1>: mov %esp,%ebp
0x080487d9 <+3>: sub $0xc,%esp
=> 0x080487dc <+6>: mov 0x8(%ebp),%ecx
0x080487df <+9>: mov 0xc(%ebp),%edx
0x080487e2 <+12>: mov 0x10(%ebp),%eax
0x080487e5 <+15>: mov %cl,-0x4(%ebp)
0x080487e8 <+18>: mov %dl,-0x8(%ebp)
0x080487eb <+21>: mov %al,-0xc(%ebp)
0x080487ee <+24>: cmpb $0x77,-0x4(%ebp)
0x080487f2 <+28>: jne 0x8048807 <phase2+49>
0x080487f4 <+30>: cmpb $0x62,-0x8(%ebp)
0x080487f8 <+34>: jne 0x8048807 <phase2+49>
0x080487fa <+36>: cmpb $0x79,-0xc(%ebp)
0x080487fe <+40>: jne 0x8048807 <phase2+49>
0x08048800 <+42>: mov $0x1,%eax
0x08048805 <+47>: jmp 0x804880c <phase2+54>
0x08048807 <+49>: mov $0x0,%eax
0x0804880c <+54>: leave
0x0804880d <+55>: ret
End of assembler dump.
는
0x080487ee <+24>: cmpb $0x77,-0x4(%ebp)
입니다
여기 무슨 일 이니? 나는 $ 0x77 값을 ebp 값과 비교한다고 생각한다. 말이 돼? 언제 어떻게 ebp에 저장되어 있는지 알 수 있습니까?
나는 위의 라인까지의 코드까지를 실행하고 EBP와 나는 다음과 같은 얻을 :
그래서ebp 0xbffff6e8 0xbffff6e8
을 요약하기, 난 그냥 그렇게, 그 라인이 정말하고있다 비교 알고 싶어 I 코드를 조금 더 잘 이해할 수 있습니다. 그리고 ebp에서 그 가치가 휴가 상태로 가지 않고 어떻게되는지 알아낼 수 있습니다.