인프런 커뮤니티 질문&답변

박상준님의 프로필 이미지
박상준

작성한 질문수

리눅스 커널 해킹. A부터 Z까지

ret2usr exp.c 코드 이해..

작성

·

213

0

ret2usr 익스플로잇 코드를 보면서 이해가 되지 않는 부분이 3가지가 있었습니다.

1. __attribute((regparm(3)) 이부분은 어떤 역할을 해주는 것인가요??

2. payload함수에서 mov %%rsp, %0 이렇게 되어있는데 %0값에 스택값이 저장되어 있나요..?

3.  payload함수에서 : : "r" (&rv)는 어떻게 해석하나요?? 처음보는 어셈블리어 코드라서 많이 헷갈립니다ㅠ

답변 1

0

김현우님의 프로필 이미지
김현우
지식공유자

안녕하세요.

1.  __attribute((regparm(3)) 는 말 그대로 gcc 컴파일 과정에서 해당 함수에 대한 attribute를 지정하는 것이며 대략 해석하자면, 해당 함수 포인터를 호출할 때 3개까지의 파라미터는 레지스터를 이용하여 전달하라는 뜻입니다.

2 ~ 3. 이 부분은 c언어의 inline assembly 문법이며, &rv를 input 변수(inline assembly 코드에 넘겨주는 파라미터)로 사용하여 rsp에 mov 하라는 뜻입니다. 즉, mov rsp, &rv 와 같습니다.

해당 내용들은 구글링을 통해 어렵지 않게 찾을 수 있으니, 참고하시기 바랍니다.

박상준님의 프로필 이미지
박상준
질문자

답변 감사드립니다 :) 커널 넘 재밌어요

박상준님의 프로필 이미지
박상준

작성한 질문수

질문하기