Disassemble (2) 썸네일형 리스트형 [Bomb Lab] Phase 3, Assembly indirect jump Assembly 코드 변환 phase_3을 assembly 코드로 변환해보면, 첫 번째 분기: 입력의 길이 확인 우선 첫 번째 분기가 일어나는 곳인 +32 줄에 breakpoint를 찍어보았다. phase 1, 2는 알아낸 정답을 입력하고, 3은 임의로 4개의 숫자 1 2 3 4를 입력해보았다. 이 때 레지스터 eax 값이 2이고, 그러면 1보다 크기 때문에 34줄은 무사히 건너뛰게 된다. 여기서 스크린샷에 첨부하지는 않았으나 10 20 30의 3가지 숫자를 입력했을 때도 eax의 값이 2였는데, 아마도 최대 2개의 입력을 읽어오는 것 같다. 스택 포인터가 가리키는 지점의 메모리 값을 확인해보면, rsp+8, 12에 각각 1, 2번째 입력 값이 들어 있었다. 두 번째 분기: 1번째 입력 값의 크기 확인 .. [Bomb Lab] Phase 2, assembly cmp/jmp, 분기, 반복문 phase_2() 함수의 assembly 확인 disassembler로 phase_2() 함수의 assembly 코드를 출력해보면 다음과 같다. 함수의 2번째 arg에 해당하는 rsi 레지스터에 스택 포인터 rsp 값을 넘겨준 뒤, read_six_numbers() 함수를 호출한다. 이 함수의 disassembler를 돌려보면 이 함수에 breakpoint를 찍고 프로그램을 실행시킨다. 이 때, phase 1은 풀었던 결과대로 정답을 바로 입력해주고, phase 2는 1 2 3 4 5 6이라는 임의의 6개 숫자를 입력한다. 함수의 1번째 arg인 rdi 레지스터가 가리키는 곳의 메모리 값을 찍어보면 입력했던 6개의 숫자가 들어있음을 확인할 수 있다. 스택 확인 read_six_numbers() 함수 호출.. 이전 1 다음