카테고리 보관물: 잡기

페낭 정착기

한국에서 페낭으로

한국에서 말레이시아 페낭으로 가는 직행 비행기가 없었기 때문에 쿠알라룸프르를 거쳐 페낭으로 가는 비행편을 구했다. 아침에 출발하는 비행기가 있기는 했지만, 두시간 전에 나와서 수속을 마치려면 가족과 제대로 인사도 하지 못할 것 같아서 오후 4시에 출발하는 비행기를 골랐다. 여기까진 좋았는데, 울먹이는 가족의 배웅을 뒤로 하고 타고 온 오후 비행기는 다음 연계되는 편이 8시간이나 떨어져 있어서 8시간동안이나 공항에서 버텨한다는 사실을 그다지 심각하게 고려하지 않았었다. 비행기 안에서 충분히 자 두면 밤샘 쯤은 식은죽 먹기일 거라며…

쿠알라룸푸르에 내려서 페낭가는 비행기로 환승하려고 갔더니 입국심사하는 아저씨가 한 번 들어가면 나올 수 없다면서 아직 시간 엄청 많이 남았는데 정말 들어 갈 거냐고 물어 본다. 배가 고팠다. 지난번 기억으로는 안에 가게들도 별로 없었기에 나중에 다시 오겠다고 하고 다시 KLIA2 공항으로 쪽으로 나왔다.

KLIA2는 마치 해외 자본의 각축장인것 같다. 이렇게 크게 지어 놓은 건물의 대부분이 외국계 프렌차이즈나 편의점들로 가득차 있어서 한국의 여느 동네와 같은 익숙함이 느껴진다. 심지어 요즘엔 한국에서 안보이는 패밀리 마트도 있다. 돈을 내고 가계로 들어가지 않으면 마땅히 앉아 있을 곳 마져 없는 이 공항에서 스타벅스에 들어가서 좀 앉아 있고 싶었지만, 커피를 줄이 려고 마음먹은 터여서 버거킹에서 햄버거를 먹으며 시간 보낼 곳이 없는지 여러곳을 검색해 봤다.

일전에 쿠알라룸프루 공항에서 아침까지 버티다가 에어로라인 버스를 타고 페낭으로 가는 여정을 고려했을때, 이 공항 안에 있는 저렴한 컨테이너 호텔에서 몇시간 자다가 출발하는 것을 생각했었기 때문에 혹시나 한 3시간정도 잘 수 있는 방이 있는지 확인해 봤는데 3명이서 쓰는 12시간 짜리 방밖에 남은게 없었다. 게다가 가격이 대략 10만원정도나 하기 때문에 다른 곳을 찾다가 시간당 가격은 더 비싸지만, 2시간에 5만원 정도하는 플라자 프리미엄 라운지가 있어서 물어보니 방이 다 찼단다. 8시간을 너무 만만히 보고 아무 예약도 하지 않은 안일한 내 탓이다.

시간이 흐르자 문을 닫는 가게들이 많아지고, 맥도날드가게 안에는 햄버거 하나 시켜서 먹고 불편한 의자에 널부러진 사람들이 보이고, 스타벅스에는 이미 의자에 앉아서 잠든 사람들도 더이상 자리가 없고, 왠만한 기둥의 콘센트들을 중심으로 서로 낯선 여행객들이 옹기종기 둘러앉아 충전을 하면서 각자의 핸드폰을 쳐다보는 풍경이 벌어진다. 나도 사람이 없는 충전기 기둥을 하나 찾아가서 핸드폰을 충전하고 핫스팟을 켰는데, 사람들이 하나 둘 모여들더니 어느새 이 근처는 부랑자 합숙소 마냥 땅바닥에 널부러져서 시간을 보내는 장소가 되었다.

호텔(?) – Econtel

지역과 금액만 정해지면 페낭에서 집구하기는 한국만큼 어렵지는 않다는 인터넷에서 주워들은 말만 믿고 2주안에 집을 구하고 그 안에 checkout 하겠다며 agoda.com에서 싼 호텔을 찾아 다니다가 걸린게 Encotel 이라는 호텔이라는 이름의 값싼 모텔이었다. Agoda의 평점은 형편 없었지만 싼 가격에라도 비싼 수준의 서비스를 바라는 사람들의 심보가 반영된 때문일 거라고 생각하고 2주치를 선불결제 했다.

주차할 자리가 모자라서 이중 삼중 주차를 하는 상가 주차장을 이 호텔이 함께 사용한다는 것과 그나마도 시간당 1링깃의 주차비를 지불해야 한다는 것(5시간 이상은 5링깃) 간신히 잡은 세마리의 모기와 수도 없는 개미들, 제대로 잠기지 않는 문과 방충망이 없음에도 닫히지 않는 창문, 침대 하나와 화장실로 꽉 차는 좁아터진 방을 경험하기 전까지는 말이다.

사실 주차장은 내 가장 큰 걱정 거리 이기도 했어서, Google street view로 이 호텔의 주차장 입구를 미리 확인했을 때는 안심했었는데 그게 바로 옆에 붙어 있는 세배 비싼 다른 호텔의 주차장 이었을 줄이야… 엘리베이터도 없는 계단을 30kg이 넘는 짐을 들고 옮긴 다음에 혹시나 하는 마음으로 예정보다 일찍 체크아웃 하게되면 남은 돈은 돌려 줄 수 있는지 카운터에 물어 봤다. 원래 자기네 정책상으로는 되는데 내 경우는 Agoda를 통해서 계약 했으니 그쪽으로 물어 보라고 한다. Agoda에서 보내주는 확약 메일에는 다음과 같은 내용이 있는데 “체크인 14일 이내에 취소하면 결제 요금 전체가 수수료로 부과 됩니다. No show하면 환불 불가합니다.” 다시말해 전체 요금을 모두 선불한 내 경우는 국물도 없다는 거다.

연휴 기간에 집구하기

멋도 모르고 음력설 연휴기간을 끼고 입국 했더니 부동산 agent들이 연락을 안받는다. 중국계가 많은 이 지역에서도 음력 연휴는 큰 명절기간이다. iProperty.com하나면 모든게 해결될 거라고 기대했던 내 얄팍한 계획이 현실의 벽앞에 좌절되고 있었다. 페낭관련 카페에서 활동한다는 한국분의 연락처를 찾아서 급한 마음에 연락을 했더니 바로 다음에 세채의 집을 보여주겠다고 연락이 왔다. 아니 두개의 쓰레기와 집 한 채라고 하는게 맞겠다. 급한 연락에 애써 준건 고맙지만 혼자 있을 집이니까 안 커도 된다고 말했음에도 굳이 방이 3개나 있는 낡은 집들을 보여주고나서 마지막에야 신축한 집을 보여주는건 일종의 판매 전략인건가?

마지막으로 본 집은 새로 지은 콘도의 스튜디오 룸이어서 크지도 않고 방도 깨끗해서 보자마자 마음에 들었는데 어디서 들은 건 있어서 월세 100링깃을 깎으려고 시도해 봤더니 의외로 바로 먹혔다. 더 불러 볼걸 그랬나… 하지만 사실은 연일 계속되는 개미와 모기의 협공으로 하루라도 빨리 호텔을 탈출하고 싶은 마음 뿐이어서 안깎아 준다고 했어도 덥썩 물었을 것이다. 집주인 잘 만나는게 중요하다는 말을 여러번 들었는데, 한국에서 일한 적이 있었다는 이 젊은 중국계 부부는 무척이나 호의적인 사람들이었다.

다만 그 후에 이 집에서 생활하면서 깨달은게 있는데, 페낭 섬에서 바다가 바로 보이는 view가 멋있지만 낮 동안 받는 태양 빛이 너무 많아서 에어컨 없이는 생활이 불가능 할 정도이다. “일조량이 좋은” 집이 좋다는 건 거의 평생을 북위 38도 근방에서 살아온 나의 편견이었다.

MBE academy의 먹튀와 경찰서에서의 시간낭비

다니던 영어학원에서 추석을 앞두고 학원을 이전한다는 안내가 있었다. 하지만 이상하게도 이사가는 위치는 알려주지 않았는데 원어민 선생님들도 위치는 모른다고 했다. 이때 눈치를 챘어야 하는 건데… 막상 추석 연휴 후에는 11월 부터 시작하겠다는 문자가 왔다.

쓸데없는 디테일과 정중함은 사기의 기본. 이 때까지도 이전 장소에 대한 안내는 없었다.

11월이 되서 수업 예약을 하려고 연락을 했더니  연락이 되지 않아서 혹시나 하고 학윈에 가봤더니 기자재는 모두 빠지고 붙어있는 연락처는 전화를 받지 않는다. 아뿔싸!

이번엔 홈페이지에 나와있는 사업자 등록번호로 국세청에조회 해보니 10월 30일자로 폐업신고 되어있었다. 응?

이쯤 되면 인정하자. 당했다.

국민신문고에 민원을 넣으니 남부교육청으로 배당되고 며칠후 연락이 왔다. 담당자의 이야기는 이 학원에 대한 여러 민원이 있었고, 현재는 영등포 경찰서 경제팀에서 이 내용을 이미 수사하고 있으니, 연락해 보라며 연락처를 주고 올린 민원을 취하해 달라고 했다.

영등포 경찰서에 연락을 했더니 결제한 카드 영수증을 가지고 방문해 달라고 한다. 책상 서랍에서 찾아낸 영수증과 함께 돈을 지불할 때 작성했던 계약서를 가지고 상담실로 가서 내용을 설명했더니 근무 하시던 분이 한참 어디론가 전화를 한다.

형사: “이게전산에안뜨는데.. .. .. .. 그럼별건으로간다고요?”

‘별건으로 간다’는 건 아마도 사안이 중요하지 않다고 판단해서 각 사건을 별도로 판단하겠다는 의미 인 듯 싶었다. 중요한 건이라고 생각했으면 하나의 증거라도 더 모으려고 하지 않았을까. 통화가 끝난 후에는 기나긴 상황 설명과 별로 중요하지 않은 질문/답변이 이어졌다. 했던 얘기를 또 묻고 또 묻던 형사 아저씨가 계약서의 날짜를 보더니 눈을 반짝이며 묻는다.

형사: “선생님이거계약하신날짜가작년 5월이네요?”
: “..”
형사: “그리고시월까지는수업받으신거고.”
: “..”
형사: “그럼이건사기로못넣어요계약을할시점에의도가있었어야하는데이경우는수업을진행했잖아요.”
: “아뇨사기로고소하고싶진않고요남은수업료만돌려받으면돼요.”
형사: “그럼여기가아니라소액심판으로가셔야지..”
: “저더러영수증갖고여기로오라면서요..”
형사: “아니그래서지금이렇게알려드리는거잖아요.”

‘귀찮은거 한건 해결’ 분위기가 물씬 풍기는 형사 아저씨의 기새등등한 반전공격에 혹시나 싶어 소액심판 청구를 알아보니 약 9만원 정도의 비용과 서류 작성하러 법원에 다니는데 추가로 시간이 소요될 것 같아서 그만 두었다. 학원 경영자가 잡혀서 받을수 있다는게 확실하다면 모를까 그냥 잃어버린셈 치자고… 잠시나마 20만원 정도 되찾을 수 있을거라고 기대했던 순진함을 질책했다.

모든게 끝나고 나서 든 생각인데.. 학원이 저렇게 문자를 보내서 인테리어 업체 어쩌네 하며 나를 안심시키고 나서 뒤로는 폐업신고 한것도 사기의도로 볼 수 없는 건가?

아직 서버 비용은 남아 있는 모양인지 MBE academy홈페이지는 계속 열려 있다. 중국어 강사인 것 마냥 오해 하게 끔 팝업창에서 광고당하는 James 선생님과 늘 반갑게 맞아 주던 작가 Rachel 선생님, 잡학다식 해서 모르는게 없던 Allen 선생님, 타국생활에 대해 친절히 조언해 주시던 Stephanie 선생님, 영어 가르쳐서 버는 돈으로 한국어를 열심히 배우던 Peter 선생님, 90% 확률로 재계약 할꺼라고 했지만 어느 순간부터 안 보이던 Grant 선생님들께 마지막 인사도 못하게 되어서 무척 아쉽다. 덕분에 많이 배우게 되어서 고맙다는 말은 꼭 하고 싶었는데… 폐업할 때 남은 임금이나마 잘 받으셨기를 바란다.

또한 어려운 환경에서도 학원 경영하느라 고생하셨던 Jimmy S. Han 선생님 너 이 개새끼 두고보자!

[책] Binary Hacks

서점에서 백수짓 하다가 낚아온 책인데 며칠 읽어보니 좀 어렵지만 좋은 내용이 많아요. 오라일리 책은 보통 한빛 미디어에서 번역 하던데 이 책의 출판사 이름은 좀 생소 합니다.
‘Hack’에서 연상되는 어두운 이미지에다 ‘cracking’을 연상 시키는 우함마 그림에 ‘해커가 전수 하는’이라는 부제 덕인지 이 책은 보안 section에 진열되어 있었습니다. (일본어 판은 바둑판 그림이 있더군요)
하지만 실제 내용은 저수준에서 시스템 동작을 설명해 주는 비중이 더 많습니다.
표지에는 ‘중급자용’ 이라고 씌여 있는데… 저는 뻥이라고 봅니다. 유용하지만 난이도가 꽤 있어요.
관심 있으시면 아래 링크에서 차례를 읽어 보세요. 🙂

http://www.itcpub.co.kr/book/book_view1.html?h_code=h_2&book_num=996#

1장 소개 1
1. Binary Hack 입문 1
2. Binary Hack 용어 정리 4
3. file - 파일 종류 확인 12
4. od - 바이너리 파일 덤프 15

2장 오브젝트 파일 Hack 21
5. ELF 입문 21
6. 정적 라이브러리와 공유 라이브러리 34
7. ldd - 공유 라이브러리 의존관계 확인 37
8. readelf - ELF 파일 정보 보기 42
9. objdump - (1) 오브젝트 파일 덤프 45
10. objdump - (2) 오브젝트 파일 역어셈블 50
11. objcopy - 실행 파일에 데이터 삽입하기 55
12. nm - 오브젝트 파일에 포함된 심볼 확인 56
13. strings - 바이너리 파일에서 문자열 추출 63
14. c++filt - C++ 심볼 demangle 65
15. addr2line - 주소에서 파일명과 행 번호 얻기 66
16. strip - 오브젝트 파일에서 심볼 삭제 68
17. ar - 정적 라이브러리 다루기 70
18. C와 C++ 프로그램 링크 방법 71
19. 링크할 때 심볼 충돌 방지하기 78
20. GNU/리눅스 시스템에서 공유 라이브러리에 PIC를 사용하는 이유 85
21. statifier - 동적 실행 파일에서 의사 정적 실행 파일 생성 89

3장 GNU 프로그래밍 Hack 93
22. GCC 확장기능 입문 94
23. GCC로 인라인 어셈블러 사용 100
24. GCC 빌트인 함수를 이용한 최적화 105
25. glibc를 이용하지 않은 “Hello World” 109
26. TLS(Thread Local Storage) 114
27. glibc로 시스템 환경에 따라 라이브러리 전환하기 116
28. 링크된 라이브러리에 따라 프로그램 동작 바꾸기 120
29. 라이브러리 외부에 공개할 심볼 제한 122
30. 호환성 관리를 위해 버전별 심볼 사용 126
31. main( ) 함수 이전에 함수호출하기 134
32. 실행 중에 GCC가 트램펄린 코드를 생성하는 방법 138
33. 스택에 있는 코드의 실행 허용/금지 140
34. 힙에 있는 코드 실행 142
35. PIE(Position Independant Executable, 위치독립실행형식) 생성 144
36. C++로 synchronized method 작성 147
37. C++로 싱글톤 생성 152
38. g++ 예외 처리 이해(throw) 158
39. g++ 예외 처리 이해(SjLj) 160
40. g++ 예외 처리 이해(DWARF2) 168
41. g++ 예외 처리의 실행 시간 비용 172

4장 보안 프로그래밍 Hack 177
42. GCC 보안 프로그래밍 입문 177
43. -ftrapv로 정수 연산 오버플로 검출 182
44. Mudflap - 버퍼 오버플로 검출 186
45. -D_FORTIFY_SOURCE로 버퍼 오버플로 검출 190
46. -fstack-protector로 스택 보호 194
47. bitmask 사용 시 unsigned를 사용하는 이유 198
48. big shift 작업이 위험한 이유 200
49. 64비트 환경에서 0과 NULL의 차이점 202
50. POSIX 스레드 안전한 함수 205
51. 시그널 핸들러 안전하게 작성하기 209
52. sigwait - 비동기 시그널을 동기적으로 처리하기 215
53. sigsafe - 안전하게 시그널 처리하기 220
54. Valgrind - (1) 메모리 누수 검출하기 230
55. Valgrind - (2) 비정상적인 메모리 접근 검출하기 233
56. Helgrind - 멀티스레드 프로그램 디버그하기 237
57. fakeroot - 거짓 root 권한으로 프로세스 실행하기 241

5장 런타임 Hack 245
58. 프로그램이 main( )에 도달하기까지의 과정 245
59. 시스템콜을 호출하는 방법 255
60. LD_PRELOAD로 공유 라이브러리 교체하기 259
61. LD_PRELOAD로 기존 함수 래핑하기 262
62. dlopen - 실행 중에 동적 링크하기 265
63. C로 백트레이스 표시 270
64. 실행 중인 프로세스의 절대경로 확인 276
65. 실행 중인 프로세스에서 로드하고 있는 공유 라이브러리 확인 280
66. 실행 중인 프로세스의 메모리 맵 확인 286
67. libbfd - 심볼 열거하기 292
68. 실행 중에 C++ 심볼 demangle하기 297
69. ffcall - 동적 시그니처로 함수호출 300
70. libdwarf - 디버그 정보 얻기 305
71. dumper - 구조체 데이터를 보기 쉽게 덤프하기 310
72. 오브젝트 파일을 직접 로드하기 314
73. libunwind - 콜 체인 제어하기 322
74. GNU lightning - 실행 중에 이식 가능한 코드 생성하기 326
75. 스택 영역의 주소 얻기 329
76. sigaltstack - 스택 오버플로에 대처하기 335
77. 함수 진입(enter)/종료(exit) 후킹하기 347
78. 시그널 핸들러로 프로그램 컨텍스트 변경하기 350
79. 프로그램 카운터 값 얻기 352
80. 자기수정코드로 프로그램 동작 변경 353
81. SIGSEGV로 주소 접근 유효성 확인 357
82. strace - 시스템콜 추적하기 360
83. ltrace - 공유 라이브러리의 함수호출 추적하기 362
84. Jockey로 리눅스 프로그램의 실행을 기록, 재생하기 364
85. prelink - 프로그램 기동 향상시키기 366
86. livepatch - 실행 중인 프로세스 패치하기 370

6장 프로파일러-디버거 Hack 379
87. gprof - 프로파일 조사하기 379
88. sysprof - 시스템 프로파일 조사하기 383
89. oprofile - 상세한 시스템 프로파일 얻기 385
90. GDB - 실행 중인 프로세스 제어하기 390
91. 하드웨어 디버그 기능 사용하기 393
92. C 프로그램에서 중단점 설정하기 397
7장 그 밖의 Hack 399
93. Boehm GC의 구조 399
94. 프로세서의 메모리 정렬 406
95. PCL을 이용한 경량 병행처리 411
95. CPU 클록 수 세기 414
97. 부동소수점 수의 비트 표현 419
98. x86 부동소수점 연산자의 특성 421
99. 결과가 무한대 또는 NaN인 연산에서 시그널 발생하기 426

With great power comes great responsibility

 

위대한 힘에는 위대한 책임이 따르는 법이란다. – 벤 파커

 

“xxx님께서 지시하신 사항입니다. 꼭 적용해 야 해요.”

프로젝트를 마무리 해야할 시기인 요즘들어 이런 ‘지시사항’들이 쏟아진다. 이 지시 사항들의 출처는 주로 ‘그 분’의 취향이며 사업자의 요구 사항문서나 스펙, 지금까지 사업자와의 협의 사항들 따위를 모조리 초월 하여 UI team의 시나리오로 정제 되어 개발자에게 전달된다. ‘[필 적용] xxx님 지시 사항’ 이라는 제목의 메일과 함께.

과연 이분은 대단한 추진력을 가지셨다. 어찌보면, 마지막 순간에도 제품이 완벽하지 않을 때면 빨간불을 켜고 ‘모두 중단’을 선언하셨다는 모 사과회사의 어떤 분과 희미하게 나마 비슷하려고 하는것 같기도 하다. 다른점이 있다면, 제품을 관통 하는 전체적인 UX에 별로 관심이 없고 지엽적인 것에 집착 한다는 사소한 차이 정도랄까…

지금의 위치에까지 올라가기 까지 무수히 많은 경험과 성공들이 바탕이 되었을 것이고, 그 자리에 어울리는 인물이기에 그 자리에 있는 거라는 것 까지 부정하지는 않겠다. 이 회사 인사 시스템이 바보 천치는 아닐꺼라고 믿고 싶으니까.

하지만 부디 반론을 허용치 않는 당신의 불도저 같은 추진력은 아무 때나 발휘하지 마시고 누구도 거스를 수 없는 명령을 내릴 수 있는 위치에 있다면, 그것이 품고 있을지도 모를 헛점을 보완할 방안을 생각해 주시기를 바란다.

당신의 Great한 Power에는 Great한 Responsibility가 따르는 법이니까.