2015년 1월 31일 토요일

영어 행성 이름 순서 외우는 방법.

how to memorize the order of planets in solar system.

My very educated mother just served us nine pies.
아주 교양있는 우리 어머니께서 방금 우리에게 파이 아홉 개를 주셨다.

Mercury
Venus
Earch
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto

출처
행성이야기 (The Planets)
작가 : 데이바 소벨 (Dava Sobel )

2015년 1월 22일 목요일

ddd 를 이용하여 구조체 내에 padding 된 byte 의 쓰레기값 관찰하기.

#include

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 는 초기화된 값인데, 그 뒤의 값은 왜 저렇게 나오는지 모르겠다.


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





2015년 1월 12일 월요일

ddd 에서 인자주기

http://www.delorie.com/gnu/docs/gdb/gdb_19.html

set args
Specify the arguments to be used the next time your program is run. If set args has no arguments, run executes your program with no arguments. Once you have run your program with arguments, using set args before the next run is the only way to run it again without arguments.
show args
Show the arguments to give your program when it is started.

또는 

After you invoke ddd, goto Program->Run and then provide your arguments.

팔로어