티스토리 뷰
gcc의 기능으로 주어진 형식이나 lvalue의 정렬을 위해 필요한 byte 수를 알려줍니다. 이를테면 아래와 같은 코드를 통해서 구조체가 몇 byte로 align되어 있는지 확인 할 수 있습니다.
printf(" align : %u \n",__alignof__(struct test));
32bit Kernel의 경우 기본 4byte, 64bit Kernel의 경우 8byte align되었을을 확인하도록 합니다. 또한 유사한 명령으로 구조체의 align을 변경할 수 도 있습니다. 아래 코드를 참조하도록 합시다.
struct compat_group_req {
__u32 gr_interface;
struct __kernel_sockaddr_storage gr_group
__attribute__ ((aligned(4)));
} __packed;
추가로 현재 구현되어 있는 Kernel 구조체에 적용할때는 그로인한 문제가 발생되는지 여부에 대해 따져보고 적용하도록 해야 합니다. 해당 구조체의 offset 계산하는 루틴이 사용되는곳이 있다면 오동작을 배제할 수 없습니다.
'개발 > Linux' 카테고리의 다른 글
offsetof 매크로 (0) | 2011.12.05 |
---|---|
Kernel ipt_get_entries struct .. size (0) | 2011.12.04 |
Kernel Netfilter socket option (getsockopt, setsockopt) (2) | 2011.12.02 |
64bit kernel + 32bit iptables (Application) (0) | 2011.11.30 |
find command (0) | 2011.11.29 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday