[시스템 프로그래밍] Bomb Lab Phase 1
gdb bomb 명령어로 디버깅 모드에 진입한 후 disas phase_1 명령어로 phase_1 함수가 어셈블리어로 어떻게 작성된 지 확인해봤다.
+11 : <strings_not_equal> 함수를 호출한다.
+16 : %eax 레지스터를 test한다.
+18 : 결과가 같지 않으면 +25로 점프한다.
+25 폭탄이 터진다.
음.. +11줄에서 문자열 두 개를 비교하고 %eax 레지스터에 결과를 넣게 되고, 이 결과에 따라서 폭탄이 터지거나 안 터지게 되는 것 같다.
좀 더 자세하게 살펴보자.
test 명령어는 두 피연산자를 and 연산한다.
jne 명령어는 ZF가 0일 경우 실행된다.
즉, +11줄에서의 결과가 1이면 폭탄이 터지지 않고, 0이면 폭탄이 터지게 됨을 알 수 있다.
그렇다면 당연히 +11줄에서 두 개의 문자열이 같은 경우 1을 반환함을 알 수 있다.
+11줄에서 어떤 문자열을 요구하는지 살펴봐야 한다.
disas strings_not_equal 명령어로 strings_not_equal 함수를 어셈블리어로 살펴보고 있다.
여기 어딘가에 비교하는 두 문자열이 저장된 레지스터를 찾을 수 있을 텐데..
+4와 +7을 살펴보니 rdi와 rsi 레지스터의 값을 사용하는걸 확인할 수 있다.
비교하는 두 문자열은 rdi와 rsi 레지스터에 저장돼있지 않을까?
I r 명령어를 사용해 레지스터의 정보들을 열람하자.
여기서 수상한 레지스터는 rsi 레지스터이다.
rsi 레지스터에는 비교 대상인 문자열이 저장돼있었다!
해당 문자열을 입력해 다음 페이즈로 넘어가자.
'Computer Science > System Programming' 카테고리의 다른 글
[시스템 프로그래밍] Bomb Lab Phase 3 (1) | 2022.12.23 |
---|---|
[시스템 프로그래밍] Bomb Lab Phase 2 (0) | 2022.12.22 |
[시스템 프로그래밍] Data Lab (0) | 2022.12.20 |
[시스템 프로그래밍] 동적 메모리 (1) | 2022.11.30 |
[시스템 프로그래밍] 시그널 (0) | 2022.11.14 |
댓글
이 글 공유하기
다른 글
-
[시스템 프로그래밍] Bomb Lab Phase 3
[시스템 프로그래밍] Bomb Lab Phase 3
2022.12.23 -
[시스템 프로그래밍] Bomb Lab Phase 2
[시스템 프로그래밍] Bomb Lab Phase 2
2022.12.22 -
[시스템 프로그래밍] Data Lab
[시스템 프로그래밍] Data Lab
2022.12.20 -
[시스템 프로그래밍] 동적 메모리
[시스템 프로그래밍] 동적 메모리
2022.11.30