작성
·
180
답변 1
1
안녕하세요.
1. memset 함수로 rop[0] 부터 rop[3] 까지 A 더미값을 넣어 준 것입니다. (코드상에선 ~ rop[4] 까지 채우지만, 실제론 그 다음 줄에 의해 ~ rop[3] 까지만 적용됩니다.)
이는 강의에서 설명이 나오다시피 커널 스택에서 return address가 저장된 부분에 rop payload를 맞춰 넣기 위한 작업입니다.
그리고 질문주신 내용대로 8~9 인덱스들은 의미가 없습니다.
2. 15 ~ 17 번째 줄에서는 intel 아키텍쳐의 어셈블리 언어가 작성되어 있습니다.
해당 부분을 c언어로 간단히 표현하자면,
cr4 = 0x1006f0 - (1<<20);
위와 같이 표현할 수 있겠습니다. cr4는 변수가 아니라 레지스터 이지만요.
cr4 레지스터에 대한 설명은 강의에 포함되어 있습니다.
이 15 ~ 17 번째 줄 부분은 인텔 아키텍쳐의 어셈블리 언어(어셈블리 언어는 아키텍쳐 별로 다릅니다)를 공부하시고, 구글에 ROP(return oriented programming) 를 검색하여 공부하시면 도움이 될 것 같습니다.
감사합니다.