
- 2018/05/08 09:16
- rousalome.egloos.com/9976023
- 덧글수 : 3

핑백
Linux Kernel(4.14) Hacks : [Linux][Kernel] 매크로 ##uname 파라미터 전달 기법 2018-06-14 23:29:29 #
... - 리눅스 커널 매크로 분석 방법- 매크로 ##uname 파라미터 전달 기법- __init 매크로 (1)- __init 매크로 (2)- container_of 매크로 - current 매크로 (1)- current 매크로 (2)- current 매크로 (3)- BUG 매크로 - WARN 매크 ... more
Linux Kernel(4.14) Hacks : [Linux][Kernel] __init 매크로 (1) 2018-06-14 23:32:37 #
... 분석 방법 - 매크로 ##uname 파라미터 전달 기법 - __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - current 매크로 (2) - current 매크로 (3) ... more
Linux Kernel(4.14) Hacks : [Linux][Kernel] current 매크로 (1) 2018-06-14 23:34:10 #
... 분석 방법 - 매크로 ##uname 파라미터 전달 기법 - __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - current 매크로 (2) - current 매크로 (3) ... more
Linux Kernel(4.14) Hacks : [Linux][Kernel] current 매크로 (2) 2018-06-14 23:34:34 #
... 분석 방법 - 매크로 ##uname 파라미터 전달 기법 - __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - current 매크로 (2) - current 매크로 (3) ... more
Linux Kernel(4.14) Hacks : [Linux][Kernel] current 매크로 (3) 2018-06-14 23:35:07 #
... 분석 방법 - 매크로 ##uname 파라미터 전달 기법 - __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - current 매크로 (2) - current 매크로 (3) ... more
Linux Kernel(4.14) Hacks : [Linux][Kernel] BUG 매크로 2018-06-14 23:35:37 #
... 분석 방법 - 매크로 ##uname 파라미터 전달 기법 - __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - current 매크로 (2) - current 매크로 (3) ... more
Linux Kernel(4.14) Hacks : [Linux][Kernel] WARN 매크로 2018-06-14 23:36:20 #
... 분석 방법 - 매크로 ##uname 파라미터 전달 기법 - __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - current 매크로 (2) - current 매크로 (3) ... more
Linux Kernel(4.14) Hacks : [라즈베리파이]리눅스 커널 매크로 분석 방법 2018-06-14 23:42:04 #
... 분석 방법 - 매크로 ##uname 파라미터 전달 기법 - __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - current 매크로 (2) - current 매크로 (3) ... more
Linux Kernel(4.14) Hacks : [라즈베리파이] 커널 빌드 & 컴파일 환경 설정 2019-01-11 00:14:37 #
... p;- __init 매크로 (1) - __init 매크로 (2) - container_of 매크로 - current 매크로 (1) - curre ... more
덧글
-
살벌한 눈의여왕 2018/07/10 12:18 # 답글
gcc 컴파일러가 rcu의 구조체의 오프셋을 계산한다는 것은 결국 offsetof 매크로를 이용한 것이겠지요?
그런데 offsetof의 정의를 보면 ((size_t) &((TYPE *)0)->MEMBER) 이렇게 되어있던데 저 화살표 마크(->)는 컴파일러수준에서 해석되는 symbol인가요?
그러니까 kernel code를 컴파일 할 때, 자신의 symbol table에서 struct worker_pool이 있을테니, 거기서 rcu의 offset을 계산해 놓는건가요? -
Guillermo 2018/08/09 17:17 # 답글
정신 없이 개발에 몰입하다가 이제야 답신을 드리는군요.
맞습니다.
GCC 컴파일러가 심볼 테이블에 있는 구조체 오프셋 값을 체크한 후 어셈블리 코드를 이미 생성하는 겁니다.
다음 코드를 보면 0을 (TYPE *)인 포인터 타입으로 캐스팅하고 다시 & 기호로 주소에 접근합니다.
((size_t) &((TYPE *)0)->MEMBER)
(TYPE *) 은 메모리 공간에 있는 덤프값을 가르키고 &는 메모리 주소를 가르킵니다.
쉽게 설명하면 (TYPE *) + & 실행을 두번 하면 셈셈이가 되고 이 과정에서 MEMBER 오프셋 주소를 읽는 겁니다.
// 제 블로그에 있는 글을 읽고 언제든 질문 남겨주시면 빠른 시일 내에 답신 드리겠습니다. -
살벌한 눈의여왕 2018/09/10 15:43 # 답글
답변 감사합니다.
다만 struct rcu_head를 포함하는 구조체의 주소를 알기 위해서는,
struct rcu_head가 struct worker_pool에 포함된다는 사실을 반드시 미리 알아야 하는 제약이 있군요.
초보 개발자에겐 큰 제약입니다ㅎㅎㅎ 감사합니다.
최근 덧글