Media Log

C++에서 함수 이름이 맹글링 되는 것은 다들 알고 있는 사실일 것이다.
링커 오류를 만나게 되면 원인을 분석하기 위해 때때로 함수의 오리지날 이름이 알고 싶을 때가 있다. 마이크로소프트의 도구로 만들어진 함수들에 대해서는 undname 이라는 프로그램이 바로 그런 일을 해준다.

레이몬드 첸의 한 포스트를 읽다가 그는 단순한 함수들에 대해서는 undname을 사용하지 않고도 한눈에 척 알아볼 수 있는 것 같다는 느낌을 받았다.
어떻게 그런 일을 할 수 있는지 알아보다가 강성훈씨가 쓴 이 포스트를 보게 되었다. 그가 말하는 것처럼 아마 현재까지 가장 잘 정리된 자료라는데 동의한다. 어린 나이에 정말 대-_-단 하다고 밖에는 말할 수 없다.

...하지만 나는 한참 살펴보다가 결심했다.
'빌어먹을. 나는 그냥 undname이나 써야겠다.'

흐아, 생각처럼 간단한 일이 아니었다.
그런데 레이몬드 첸은 정말 간단한 함수 정도는 추측할 수 있는 것일까? 아직도 잘 모르겠다.
저작자 표시 비영리 동일 조건 변경 허락
신고
  1. gcd at 2012.02.22 06:38 신고 [edit/del]

    msvc로 mangling 당한 이름에 처음 접했을 때 꽤나 당황했었지요.
    저 룰도 컴파일러마다 다른 모양이라 (거기에다 msvc 9.0부터 규칙-이라기보단 인코딩-이 바뀌었다고 하고...) 링크 시간에 호환이 되긴 하나 하는 의문도 들더라구요.
    여튼, 저 암호(?)를 풀 수 있다는 사실을 알았던건 Dependency walker를 써보면서였군요. 포스트와 다르게 DLL 파일의 export/import된 함수들을 볼 수 있지만, C++ 로 만든(그것도 msvc로 컴파일 한) 몇 비공개 라이브러리에 들어있는 멤버 함수들을 다 볼 수 있어서 신났던 기억이 나네요.

    Reply
    • Favicon of http://www.benjaminlog.com BlogIcon 김재호 at 2012.02.22 10:22 신고 [edit/del]

      저는 9부터 바뀐줄 몰랐습니다. 그런데 그런 걸 바꾸면 부작용이 엄청날텐데. 호환성은 어떻게 맞춰줬을지 궁금하군요.

    • gcd at 2012.02.22 21:19 신고 [edit/del]

      룰이 바뀌었다기보단, 인코딩 처리하는 방법이 ANSI에서 UTF-8로 바뀌었다고 하더라구요.
      대부분 영문 명칭을 쓰기 때문에 임팩트가 거의 없을 것입니다.
      아니, 임팩트가 없었으면 좋겠는데, 8.0 이전에 만든 obj와 이후에 만든 obj 사이에서 가끔 링크 오류가 나긴 하나보더라구요. msvc 8.0용으로 땜빵(?) 패치가 나왔었고(이것도 주로 일본어권의 요구사항으로... 그러고보니 바뀐건 9가 아니라 8부터였네요.) 9.0 이후로는 지원 계획이 없다고 하네요.

      적고보니 mangling이랑 별로 상관 없네요. 헷갈리게 한 것 같아서 죄송합니다.

submit
NTFS에서 만들 수 있는 단일 파일의 가장 큰 크기는? 16테라. 빙고.
그럼 NTFS 상에서 16 테라 바이트의 파일을 만들기 위해서는 얼마나 시간이 걸릴까?

답은 여기에 있다.

16TB 라는 숫자의 이미지가 머리 속에 잘 안그려져서 내 추정보다 훨씬 큰 기간이 나와버렸는데, 가만히 계산해보니 그렇게 놀라운 숫자도 아니다. 16TB라는 숫자를 너무 얕봤나보다.
저작자 표시 비영리 동일 조건 변경 허락
신고

submit
레이몬드 첸의 윈도우 개발 282 스토리 - 10점
레이몬드 첸 지음, 손광수 옮김/ITC(아이티씨)
윈도우즈 프로그래머라면 꼭 구독해야 할 블로그로 하나를 꼽으라면 단연 레이몬드 첸의 The Old New Thing 일 것이다.

그의 블로그는 포스팅이 꽤나 자주 올라오는데, 보통 한번에 2개씩 올라오고 하나는 기술적인 이야기 다른 하나는 잡소리이다.

윈도우즈 프로그래머가 관심있어 할만한, 그리고 얻어갈만한 주제들로 글을 쓰는데다가 유머감각도 꽤 있기 때문에 그의 블로그는 재미있다.


이 책은 2006년에 그의 블로그의 글들을 모아서 발행되었으며, 2007년에 번역서가 출간되었다.
처음 이 책이 나왔을 때 나는 UI 프로그래밍에 관심이 많아서 그 쪽으로 많이 읽었는데, 이번에 다시 읽을 때는 파일 시스템이나 윈도우 시스템 내부의 이야기를 중심으로 읽었다.

물론 재밌기도 할 뿐더러, 그의 놀라운 지식과 통찰력들을 많이 배울 수 있어서 좋은 주말이었다.

기술적으로만 보면 NTFS의 터널링이나 디렉터리의 읽기 전용 속성에 대한 내용이 가장 기억에 남지만, 그보다도 더 인상 깊었던 것은 쉽게 지나칠뻔 했던 어떤 챕터에서 나온 다음 문장이었다.

만약 어떤 애플리케이션이 윈도우 95에서 실행되지 않는다면(애플리케이션의 버그로 인하여) 필자는 이를 개인적인 실패로 받아들였다. 그리고 수많은 밤을 새면서 이들이 윈도우 95에서 실행될 수 있도록 하기 위해 서드파티 프로그램들의 버그를 수정했다.

얼마나 많은 개발자들이 버그를 남의 탓으로 돌리는지를 잠깐만 생각해보면, 왜 마이크로소프트의 윈도우가 이렇게 성공할 수 있었는지, 그리고 그가 왜 세계 최고의 프로그래머라는 소리를 듣는지를 조금이나마 이해할 수 있다.

2007년 이후 그의 블로그에 엄청난 양의 포스팅이 쌓였는데, 이제 2권을 낼 때가 되지 않았나 싶기도 하다. 2권을 낸다는 글을 얼마전에 어디선가 본거 같기도 한데(그게 이 책을 다시 찾은 이유였지만) 꿈에서 봤는지 아무리 찾아봐도 찾을 수가 없었다.

이렇게 얻어갈 것도 많으면서 재밌게 읽히는 책은 많지 않다.
빨리 2권이 나와서 내게 또 하나의 즐거움을 줬으면 좋겠다.

신고
  1. Favicon of http://blogs.technet.com/sankim BlogIcon sankim at 2010.08.01 22:33 신고 [edit/del]

    제 블로그 방문해 주셔서 가사합니다.
    근데 허헉.. 한글번역본이 있군요? 번역 상태는 어떤가요?

    Reply
    • Favicon of http://www.petabytes.org BlogIcon 김재호 at 2010.08.01 22:50 신고 [edit/del]

      음 글쎄요. 다른 블로그들에는 번역이 엉망이라고 많이 쓰여있던데 저는 그렇게 나쁘지는 않았습니다. 단지 용어의 선택이 아쉬운 부분들이 많기는 했는데, 주의 깊게 읽으면 괜찮아요^^;

  2. fullc0de at 2011.06.18 16:16 신고 [edit/del]

    저도 번역본 읽다가 원서 사본 1인 ㅋㅋ

    Reply

submit