stack smashing detected

프로그램 TEST 중 아래와 같은 오류가 발생했다.

결과는 Core dump.

jonathan@jonathan-laptop:~/workspace/TEST$ ./TEST
*** stack smashing detected ***: ./TEST terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0xb775c390]
/lib/tls/i686/cmov/libc.so.6(+0xe233a)[0xb775c33a]
./TEST[0x804a2f4]
./TEST[0x8049189]
./TEST[0x8049258]
./TEST[0x8049205]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb7690bd6]
./TEST[0x8049081]
======= Memory map: ========
08048000-0804f000 r-xp 00000000 08:05 7344439    /home/jonathan/workspace/TEST/TEST
0804f000-08050000 r–p 00007000 08:05 7344439    /home/jonathan/workspace/TEST/TEST
08050000-08051000 rw-p 00008000 08:05 7344439    /home/jonathan/workspace/TEST/TEST
08051000-080fd000 rw-p 00000000 00:00 0
09a2c000-09a4d000 rw-p 00000000 00:00 0          [heap]
b763d000-b765a000 r-xp 00000000 08:05 4849747    /lib/libgcc_s.so.1
b765a000-b765b000 r–p 0001c000 08:05 4849747    /lib/libgcc_s.so.1
b765b000-b765c000 rw-p 0001d000 08:05 4849747    /lib/libgcc_s.so.1
b7678000-b767a000 rw-p 00000000 00:00 0
b767a000-b77cd000 r-xp 00000000 08:05 4984558    /lib/tls/i686/cmov/libc-2.11.1.so
b77cd000-b77ce000 —p 00153000 08:05 4984558    /lib/tls/i686/cmov/libc-2.11.1.so
b77ce000-b77d0000 r–p 00153000 08:05 4984558    /lib/tls/i686/cmov/libc-2.11.1.so
b77d0000-b77d1000 rw-p 00155000 08:05 4984558    /lib/tls/i686/cmov/libc-2.11.1.so
b77d1000-b77d4000 rw-p 00000000 00:00 0
b77ef000-b77f2000 rw-p 00000000 00:00 0
b77f2000-b77f3000 r-xp 00000000 00:00 0          [vdso]
b77f3000-b780e000 r-xp 00000000 08:05 4855235    /lib/ld-2.11.1.so
b780e000-b780f000 r–p 0001a000 08:05 4855235    /lib/ld-2.11.1.so
b780f000-b7810000 rw-p 0001b000 08:05 4855235    /lib/ld-2.11.1.so
bff3e000-bff53000 rw-p 00000000 00:00 0          [stack]
Aborted (core dumped)

원인 분석을 위해 코어 파일과 함께 gdb를 실행 시켜 보았다.

jonathan@jonathan-laptop:~/workspace/TEST$ gdb -c core TEST
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type “show copying”
and “show warranty” for details.
This GDB was configured as “i486-linux-gnu”.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>…
Reading symbols from /home/jonathan/workspace/TEST/TEST…done.
[New Thread 5966]

warning: Can’t read pathname for load map: Input/output error.
Reading symbols from /lib/tls/i686/cmov/libc.so.6…(no debugging symbols found)…done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2…(no debugging symbols found)…done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/libgcc_s.so.1…Reading symbols from /usr/lib/debug/lib/libgcc_s.so.1…done.
done.
Loaded symbols for /lib/libgcc_s.so.1
Core was generated by `./TEST’.
Program terminated with signal 6, Aborted.
#0  0xb77f2430 in __kernel_vsyscall ()
(gdb) where
#0  0xb77f2430 in __kernel_vsyscall ()
#1  0xb76a4651 in raise () from /lib/tls/i686/cmov/libc.so.6
#2  0xb76a7a82 in abort () from /lib/tls/i686/cmov/libc.so.6
#3  0xb76db49d in ?? () from /lib/tls/i686/cmov/libc.so.6
#4  0xb775c390 in __fortify_fail () from /lib/tls/i686/cmov/libc.so.6
#5  0xb775c33a in __stack_chk_fail () from /lib/tls/i686/cmov/libc.so.6
#6  0x0804a2f4 in TestHeadMake () at test.c:515
#7  0x08049189 in TestLog (loglvl=1, title=0x804df59 “TEST”, fmt=0x804df57 “n”) at test.c:196
#8  0x08049258 in StartMessage () at test.c:237
#9  0x08049205 in main (argc=1, argv=0xbff509a4) at test.c:218

문제는 간단했다.

함수 TestHeadMake() 내에서 사용하는 문자열 버퍼 timeStr 의 사이즈가 데이터를 담기에 작았던 것.

바로 찾아서 해결을… 했으면 좋았겠지만 한참을 찾았다…;;

THE ROAD – Cormac McCarthy

사내 극장에 붙여진 이름과 같은 이름을 가진 책.

사내에는 캣츠(Cats), 레 미제라블(Les Miserable), 미스 사이공(Miss Saigon).. 그리고 로드(The Road) 의 이름을 가진 회의실과 극장이 있다. 로드는 모르겠지만 미스 사이공과 캣츠, 그리고레 미제라블은 이미 뮤지컬로 널리 알려진 이름이다.

어느 하나도 직접 뮤지컬로 본 적은 없었지만, 뮤지컬에 삽입된 음악..캣츠의 Memory, 레 미제라블의 I dreamed a dream 은 나를 감동으로 가득차게 만들었었다.

그래서 아마 ‘로드’ 역시 정말 감동으로 가득찬 뮤지컬의 제목일 것이라고 생각하고 이 책을 읽었던 것 같다. (사실 ‘로드’라는 제목은 회사 제품 런칭 행사때 공연한 뮤지컬의 제목과도 같다. 나는 책을 고를 때 그것을 잠시 잊고 있었다)

어두웠다. 이렇게 어두운 모습을 보여주는 책이 있을까!
책의 처음부터 마지막까지 어느 한 부분도 주인공의 웃음소리는 나오지 않는다.

아버지와 아들..
그들은 책 이야기 내내 항상 굶주리고, 추위에 떨고, 비에 젖으며, 찌는 듯한 태양에 땀을 뻘뻘 흘린다.

밝은 미래는 커녕 내일도 살아갈 수 있을지조차 장담할 수 없다.

책에는 대화가 없다.

쌍 따옴표(“”)로 나타내는 대화는 단 한줄도 없다.
아버지와 아들이 나누는 이야기는 있지만 말을 통해 대화를 하는 것이 아닌 그저 몸짓이나 다른 교감을 통해 짤막짤막한 의미를 주고 받는 것 처럼 보여진다.
뭔가 낭만적으로 느껴질법도 하지만 그 쌍따옴표가 없는 짧디 짧은 대화는 말할 힘이 없어 그저 겨우겨우 의미를 전달하는 듯이 보여진다. 정말 암울하다.

주인공인 아버지와 아들은 이야기의 마지막까지 계속해서 믿을 수 없는 현실에 고통받으며 살아간다.
아버지는 자신이 죽을 것에 대비하여 아들에게 자신이 죽은 다음에 할일을 가르친다.

그것은 자살하는 법.. 어떻게 하면 고통없이 짧은 시간에 자살을 할 수 있는지에 대해 가르친다.

총에 남아있는 마지막 총알 한발은 자신이 아닌 아들의 마지막을 위한 것…

도대체 작가는 이렇게 어두운 이야기를 통해 무엇을 이야기하고자 하는 것일까?

그것은 희망이라고 말하고 싶다.

빛이 들지 않는 어두운 세상, 모든것이 불타 없어진 세상, 산 자가 죽은 자를 부러워하는 세상에서 아버지와 아들은 그래도 꿋꿋이 살아간다.
아버지는 자신의 아들을 자신의 단 하나뿐인 희망으로 여긴다.
무엇을 하더라도 자신을 생각하는 것이 아닌 아들을 생각하며 아들을 위해 하루하루를 살아간다.

그리고 결코 포기하지 않는다.

수십 번, 수백 번, 아니 그 몇번을 생각해도 아버지는 자신이 아닌 아들을 위해 그 우울한 세상에서 살아남기를 포기하지 않는다.
그것이 작가가 이야기하고자 하는 것 같다.

“이 정도로 우울한 세상 속에서도 희망은 있다.”라고 말이다.

책을 읽으면서 자꾸 영화 소개 프로그램에서 본 듯한 이미지가 생각이 나서 찾아보았다.
역시 이 책의 영화 버전이 있었다. 정말 책에서 느껴진 이미지 그대로였다.

관련 자료 : http://en.wikipedia.org/wiki/The_Road

지식e 6 – EBS 지식채널e

언젠가 이 책에 나온 에피소드 한 편을 보고 포스트를 남긴 기억이 있어서 한번 찾아보았다.

2010, 5/19 늦은 밤, 이른 새벽…

이라는 제목으로 글 하나가 검색되었다.

거의 1년전에 남긴 글.
그때는 어떤 느낌으로 글을 남겼을까.
기대 반, 호기심 반으로 읽어보았다.

역시나, 그 때의 나는 아무말도 할 수가 없었다.

그리고 그 날로부터 1년이 지난 오늘 역시도 나는 아무말도 할 수가 없었다.

실수…

예전 시애틀 여행갈 때 생긴 에피소드다.

캐나다 벤쿠버에서 미국 시애틀로 넘어갈 때, 버스를 타고 이동을 했는데 캐나다-미국 국경에서 문제가 생겼다.

국경을 통과하려면 인세(약 10달러?)가 필요한데 때마침 수중에는 캐나다 달러만 가지고 있었다.

국경 관리인은 현금은 미국 달러만 허용이 된다고 했고, 카드는 사용할 수가 있지만 내가 가지고 있는 카드들은 그곳에서 사용할 수 없는 카드들이었다.

한동안 입국 심사대에서 쩔쩔매고 있던 나를 기다리다 지쳤는지 밖에 있던 버스 운전기사가 나를 데리러 와서는 한눈에 상황을 파악했다.

그리고 입국 관리인에게 몇마디를 한 다음에, 나와 함께 버스로 다시 돌아갔다.

버스안에서 내가 가진 캐나다 달러를 미국 달러로 바꿔줄 사람을 찾기 위해서였다.

미처 미국 달러를 준비를 못한 나 때문에 이런 번거로운 수고를 하게 되어서 미안하다고, 죄송하다고 연신 “Sorry, I’m so sorry.” 를 말했다.

그랬던 나에게 그 운전 기사가 웃으면서 대답했다.

“누구나 실수는 해요. 연필에 지우개가 달려있는 것도 같은 이유 때문입니다.”

한순간 바람이 되어라3 – 사토 다카코

한순간 바람이 되어라 시리즈의 완결편.
인터하이(종합체전)에 나가기 위한 고등학생들의 달리기가 결실을 맺는 부분이다.

사실, 인터하이에 대한 이야기는 나오지 않는다
인터하이에 출전하기 전까지의 이야기가 전부이다.

100미터, 200미터, 400미터, 1600미터..

정해진 기간동안 최고의 기록을 내기위해 노력하는 모습들.
이미 기록따윈 상관없을지도 모른다.
책속에서 대회를 준비하며 흘린 땀방울, 눈물, 그 동안의 시간들이 중요할 뿐.

그리고 마지막 대단원의 계주.

믿을 수 없는 기록. 소설이니 당연히 허구이겠지만 진짜처럼 느껴진다.
마치 책을 읽는 동안은 내가 주인공이었던 것 처럼..