typedef struct _a
{
char a;
int i;
}PAD;
typedef struct __attribute__((packed)) _b
{
char a;
int i;
}PACK;
int main(int argc, char * argv[] )
{
PAD pad = { 'a', 10 };
PACK pack= { 'b', 20 };
printf( "PAD char : %c\n", pad.a );
printf( "PACK char : %c\n", pack.a );
printf( "size PAD : %d\n", sizeof(PAD ) );
printf( "size PACK : %d\n", sizeof(PACK) );
return 0;
}
위 코드를 이용하여 ddd 를 사용해보자.
(gdb) print pad.a
$9 = 97 'a'
(gdb) print pad
$10 = {a = 97 'a', i = 10}
pad 의 주소를 출력
(gdb) print &pad
$13 = (PAD *) 0xbffff240
pad.a 의 주소를 출력(값도 같이 나온다.)
(gdb) print &pad.a
$14 = 0xbffff240 "a\324\025"
a 는 초기화된 값인데, 그 뒤의 값은 왜 저렇게 나오는지 모르겠다.
a 는 초기화된 값인데, 그 뒤의 값은 왜 저렇게 나오는지 모르겠다.
pad.a 의 주소를 이용하여 word(32bit 컴에서 4 byte) 를 출력
(gdb) x /wx &pad.a
0xbffff240: 0x0015d461
pad.a 의 주소를 이용하여 1 byte 를 출력
(gdb) x /bx &pad.a
0xbffff240: 0x61
( pad.a + 1 ) 주소를 이용하여 1 byte 를 출력
(gdb) x /bx &pad.a + 1
0xbffff241: 0xd4
( pad.a + 2 ) 주소를 이용하여 1 byte 를 출력
(gdb) x /bx &pad.a + 2
0xbffff242: 0x15
( pad.a + 3 ) 주소를 이용하여 1 byte 를 출력
(gdb) x /bx &pad.a + 3
0xbffff243: 0x00
댓글 없음:
댓글 쓰기