[ Kernel Exploit] Kernel 공부를 위한 C언어
sangjun
·2021. 7. 20. 23:00
예제 코드
__attribute__((속성))
1. __attribute__((packed))
struct register_val{
uint64_t user_rip;
uint64_t user_cs;
uint64_t user_rflags;
uint64_t user_rsp;
uint64_t user_ss;
}__attribute__((packed));
위의 코드는 구조체로 padding이 끼지 않은 구조체를 만들고 이진코드로 만들어준다.
--> C언어 시간에 배운 구조체 크기를 sizeof해보면 실제 예상하던 크기와 다를 수 있다는게 이말이었다.
--> 1학년 때 왜 그랬던거지? 이렇게 넘겼던게 이어지는 느낌이 든다.
https://unipro.tistory.com/197
2. __attribute__((regparm(3))
이것을 함수의 인자를 넘길 때 스택을 이용해 넘기는 것이 아니라 레지스터를 이용해 넘기는 것이라고 한다.
regparm(3)안에 3은 아마 인자 3개까지 레지스터로 바로 함수인자를 넘기는거 같다.
더 자세한 설명은 아래 링크를 보길 바란다.
https://coolengineer.com/entry/fastcall
3. : : "r" (&rv)
void payload(){
commit_creds(prepare_kernel_cred(0));
asm("swapgs;"
"mov %%rsp,%0;"
"iretq;"
: : "r" (&rv));
}
ret2usr을 쓸 때 : : "r" (&rv)는 c언어 inline assembly언어로 mov rsp,&rv와 똑같다고 한다.
'Pwnable > Kernel exploit' 카테고리의 다른 글
[Kernel] QWB CTF 2018 - core (ret2usr) (0) | 2021.07.25 |
---|---|
[Kernel] Kernel공부를 위한 커널문제 모음 (4) | 2021.07.22 |
[Kernel] 커널에서 외워야할 명령어들 (3) | 2021.07.21 |
[Kernel] ret2usr (0) | 2021.07.20 |
[ Kernel Exploit] Kernel 공부를 위한 자료들 (1) | 2021.07.20 |