728x90

pc 레지스터에대한 이해가 필요하다.


cpu가 하나의 명령어를 수행할 떄 fetch -> decode -> execute의 과정을 거친다.

2개의 opcode를 실행하려면 fetch -> decode -> execute -> fetch -> decode -> execute 총 6번의 작업이 필요하다.

그러나 pipe line 을 통해서


1            2            3            4

   fetch        decode    execute    

fetch        decode    execute


위처럼 병렬적으로 단계를 수행하게 된다. 2개의 opcode를 실행할 때 4번의 작업으로 실행시키는 것이다.


pc 레지스터는 fetch할 주소를 담고 있다.

현재 명령어가 execute 즉 실행단계라면, 다음 명령어는 decode 단계이고, 그 다음 명령어는 fetch 단계이다.

그렇기 때문에 pc레지스터에는 실행시킬때 다다음번째 명령어의 주소를 담고 있다.



leg 문제풀이

key1


적용시켜보면 0x00008cdc에서의 pc레지스터에는 그 다음다음 번째 주소인 0x00008ce4가 들어가 있다.



key2

pc는 0x00008d04의 다음다음 주소인 0x00008d08이고, 다음 명령어를 보면 adds r3, #4가 있다.

그렇기때문에 key2는 0x8d0c 이다.


key3


lr 레지스터는 ret에 있는 주소값을 가져온다. 즉 key3 함수가 끝난후 실행될 opcode의 주소를 받아온다.

0x8d80이다.


key1 + key2 + key3 를 하면 총 합은 108400이다.



플래그획득



============================================================================================

새로보는 레지스터들이 많았다. 배경지식필요 공부 필요

어셈코드를 잘읽을 줄 알아야한다. -> 어셈코딩공부를 하자.


728x90

'Wargame_writeup > Pwnable.kr' 카테고리의 다른 글

horcruxes  (0) 2018.12.21
cmd1  (0) 2018.12.21
lotto  (0) 2018.12.19
random  (0) 2018.12.19
blackjack  (0) 2018.12.19

+ Recent posts