3,000

┗━안녕하세요^^*
▶▶모든고객을 가족같이 생각하는┗━▶동수◀━┛입니다◀━┛
▶▶대한민국의 모든 국민이 즐기는 게임을 제가 소개해드릴께요~◀━┛
☞☞☞www.asuspoker.com
┗━▶이 사이트는 [온라인 리얼 현금게임(포커,맞고)]◀━┛
┗━▶신규가입 3,000원 지급해드리구요◀━┛
┗━▶(추)(천)(인)┗━▶동수◀━┛를 상담에 쪽지 남겨주시면 1,000원 추가지급해드려요◀━┛
┗━▶승급축하금은 최고 200만 입니다
┗━▶따신 게임머니는 바로바로 통장으로 지급해드립니다◀━┛
┗━▶입금한【『돈』】돌려받자 이벤트 실시중◀━┛
▶▶▶그리고 매주 일요일이면 5만원 보너스머니 지급(최소결제이상)◀━┛
▶▶▶더블잭팟 이벤트(잭팟당첨시 당첨금 한번더 지급)
┗━▶잊지마시고 (추)(천)(인)┗━▶동수◀━┛를 꼭 쓰세요◀━┛
┗━▶쓰시면 1,000원 드립니다◀━┛
┗━▶http://www.asuspoker.com

‹ OS_ENTER_CRITICAL과 test and set의 차이점은?? [완료]awk 를 이용하여 문자열에 같은 값 제거 ›

malloc hook: mbuddy

오늘은 상당히 재미있는 것을 배워봅시다. :lol:

GNU C 라이브러리의 malloc/realloc/free 함수는 다양한 디버깅 기능과 hook 기능을 제공합니다. 이번에 다룰 것은 hook 기능인데, 이 기능을 이용하면 다양한 malloc utility를 만들 수 있습니다. 아이디어는 간단합니다. 프로그램이 malloc을 부르게 되면 C 라이브러리 malloc이 사용자가 등록한 hook 함수가 있는지 조사하고 hook가 있을 경우, 그 hook 함수를 대신 부릅니다. 물론 이 hook 함수는 원래의 malloc을 호출할 수 있습니다.

void *(*__malloc_hook)(size_t SIZE, const void *CALLER);
void *(*__realloc_hook)(void *PTR, size_t SIZE, const void *CALLER);
void (*__free_hook) (void *PTR, const void *CALLER);

이 세 후크는 각각 malloc/realloc/free 함수와 비슷한 함수 포인터를 받습니다. 대신 각각 CALLER라는 인자를 추가로 받는다는 것만 다릅니다. 따라서 사용자는 다음과 같이 hook 함수를 만들 수 있습니다.

void *
malloc_hook(size_t SIZE, const void *CALLER)
{
}

void *
realloc_hook(void *PTR, size_t SIZE, const void *CALLER)
{
}

void *
free_hook(void *PTR, const void *CALLER)
{
}

그리고 각각의 함수를 앞에서 소개한 hook 변수에 등록해 줍니다. 이 때, 이 초기화 함수를 GNU C 라이브러리가 메모리 관련 함수를 호출하기 전 항상 불러주는 __malloc_initialize_hook 변수에 등록해주면 사용자가 따로 불러줄 필요가 없습니다:

void (*__malloc_initialize_hook)(void) = malloc_init;

static void
malloc_init(void)
{
  old_malloc_hook = __malloc_hook;
  old_realloc_hook = __realloc_hook;
  old_free_hook = __free_hook;

  __malloc_hook = mb_malloc;
  __realloc_hook = mb_realloc;
  __free_hook = mb_free;
}

위에서 old_로 시작하는 변수는 기존에 등록된 hook 함수들이 있을 경우, 필요하다면 다시 복귀시켜주기 위한 것입니다. 이 작업은 우리가 만든 malloc 함수인 mb_malloc()에서 진짜 malloc()을 부르기 위해 필요합니다. 즉 hook의 값을 원래대로 복원하는 기능과 제가 만든 함수로 등록하는 기능이 필요한데, 다음 매크로가 그 기능을 합니다:

#define RESTORE_HOOK()  do { \
                          __malloc_hook = old_malloc_hook; \
                          __realloc_hook = old_realloc_hook; \
                          __free_hook = old_free_hook; \
                        } while (0)

#define SAVE_HOOK()     do { \
                          __malloc_hook = mb_malloc; \
                          __realloc_hook = mb_realloc; \
                          __free_hook = mb_free; \
                        } while (0)

그러면 mb_malloc()은 쉽게 만들 수 있습니다.

static void *
mb_malloc(size_t size, const void *caller)
{
  void *p;
  RESTORE_HOOK();

  p = malloc(size);

  SAVE_HOOK();
  return p;
}

이런 식으로 mb_realloc()과 mb_free()를 만듭니다. 그리고 각 함수에서 (여기서 보이지는 않았지만) 호출된 시간과, 할당 또는 해제하는 메모리 크기 등을 로그 파일에 기록하도록 합니다. 제가 사용한 방식은, 먼저 millisecond 단위로 시간 기록, 전체 동적 할당 메모리 크기 기록, 그리고 현재 할당인지 해제인지 +-로 표시 기록, 그리고 메시지 기록입니다:

1142552430.940313:     29576:     -5663: realloc(0x804ccc8, 1753) from 0x8049aa9 => 0x804ccc8
1142552430.940339:     27597:     -1979: free(0x80515c0) from 0x8049885
1142552430.940372:     33625:      6028: malloc(6028) from 0x8049815 => 0x8055078

실제 mb_malloc()/mb_realloc()/mb_free()는 이보다 조금 더 복잡합니다. 원래 realloc()과 free()에서 현재 할당되어 있는 메모리의 크기를 알 수가 없으므로, malloc의 경우, 좀 더 큰 메모리를 할당해서 앞 공간에 할당한 크기, 시간 등을 기록하고, 그 뒤에 빈 공간을 리턴하도록 합니다. 그리고 realloc과 free에서 그 공간을 참고해서 원하는 정보를 얻을 수 있도록 합니다.

이 과정이 끝나면 단순히 링크하는 것만으로 메모리 할당 관련 자료를 얻을 수 있습니다. 지금까지 작업한 내용을 mbuddy.c로 만들고, 컴파일합니다:

$ cc -o mbuddy.o mbuddy.c

그리고 나중에 대상 프로그램에 함께 링크해 줍니다:

$ cc -o my_application a.c b.c c.c mbuddy.o

그리고 나서 이 프로그램을 실행하면, 관련 로그를 (e.g. "mb.out"에 기록한다고 가정) 얻을 수 있고, 이 것을 간단한 gnuplot script를 써서 그래프를 그리면 첨부와 같습니다:

전체 소스는
여기에서 볼 수 있습니다. 맨 위 버전에서 "(view)"를 누르면 소스가 보입니다.

Flash로 만든 gnuplot 그래프 메모도 있습니다.

phpBB에 비밀글 기능을 추가할 수 있을지요??

제로보드에서도 하는 것으로 보아서는 크게 기술적인 한계는 아닌 것같고.....
이상하게 인터넷에는 전혀 없네요.... (심지어 구글신께 상의를 해봐도....)
방법이 있는지... 없는지... 알려주시기 바랍니다... :oops:

(휴대폰)LG-LP4500 새거 3만원에 드립니다.

-----------------모델은 세티즌닷컴에서 찾아보시면 됩니다. ----------------------------------

안녕하세요. EZ-Post (LGT본사 직영점)의 박일권입니다.

KTF나 SKT에서 LGT로 번호이동하는 조건이구요.

기타 부가서비스나, 요금제 제한등 문제 없습니다.

그러므로, 부가서비스 쓰실분만 쓰시고, 요금제는 맘에 드는걸로 쓰세요.

무약정,무조건! 이구요.

휴대폰 저가형 찾으시는 분들이나, 부모님같은 어르신 핸드폰 해주실 분들 적극 추천해드립니다.

이런곳에 글올려서 본사직원 의심하시는분들 많은데, 제 개인적인 주민등록사본 보내드릴수 있습니다.

1. 오늘 (14일)날만 되는 정책입니다. 오늘 하루뿐인 기회~!!!
오늘 개통하긴 하나, 오늘 개통되는대로 긴급택배로 보내드립니다.
그래서 오늘과 내일은 핸드폰 못쓰신다고 생각하시면 됩니다.
단, 대전에 사시는 분들은 직접 찾아오시면 됩니다. 핸드폰으로 연락주세요.

2. 전 통신사에서 가입한지 3개월만 지나면 번호이동이 가능합니다.
단, 보조금은 받지 못하니 유의 하시기 바랍니다.

3. 전국어디로라도, 긴급택배로 바로 발송 가능합니다. (오늘 일괄로 붙여드리겠습니다.)

***4. 부가서비스, 요금제에서 조건없습니다. 약정할인 아닙니다. 언제까지 써야한다는 의무조건
없습니다.

6. 가입비는 3만원 들어갑니다. 하지만 이것도 3달 할부(10000 x 3달)로 나누어 드릴수있습니다.

7. 중고핸드폰 아닌 새거입니다.

8. A/S는 나중에 저에게 직접 연락을 주시거나, 가까운 서비스 센타 찾아가시길 바랍니다.
(새 제품이기때문에, 2년 혹은 1년동안 무상A/S기간 있습니다.)

9. 별정통신이 아닌 본사직영점에서 드리는것 입니다.

10. 일반 LG Telecom에서 파는 모델과 동일한겁니다.

11. 수량은 정확하지 않으나, 50개 정도 있습니다.

위와 같은 조건이 맞지 않을경우 무조건 기기 출고값 보상해드립니다.

이상 Ez-Post 박일권이였습니다.

연락은 E-mail: inmybyul@gmail.com이나,

휴대폰 : 010-7777-3779

로 연락주시길 바랍니다. 전화및 문자 환영합니다.

다시 한번 정리해서 말씀드리면,

신규시 : 6만원
번호이동시 3만원 입니다.