Programming Tip

main() 함수 이전 또는 이후에 함수 호출하는 3 가지 방법

main() 함수 이전 또는 이후에 함수 호출하는 3 가지 방법

여러분이 정의한 함수를 main 함수 이전에 호출되도록 할 수 있다는 것을 알고 계신가요? 보통은 함수를 정의하면 main 내에서 호출해서 사용하므로 main 시작 이전 또는 이후에 어떤 함수를 호출한다는 것은 불가능한 것으로 알고 있을겁니다. 하지만, 이를...

LD_PRELOAD 환경변수를 이용한 공유라이브러리(Dynamic Library) 후킹(Hooking)

LD_PRELOAD 환경변수를 이용한 공유라이브러리(Dynamic Library) 후킹(Hooking)

여러분은 후킹(Hooking)이라는 것이 무엇인지 알고 계실 것입니다. 아직 이것이 무엇인지 모르시는 분은 http://ko.wikipedia.org/wiki/%ED%9B%84%ED%82%B9 에서 확인하고 다시 돌아오시길 바랍니다. 한마디로 중간에서 무언가를 가로채서 원래의 기능을 자기가 다시 정의한 기능으로 교체하는 기술이라고 보면 됩니다. 이러한 기술은 아주 여러 분야에서...

TLS(Thread Local Storage) : __thread 키워드를 이용한 thread 별 독립적 변수

TLS(Thread Local Storage) : __thread 키워드를 이용한 thread 별 독립적 변수

여러분은 C 나 C++ 프로그래밍을 할 때 errno 에 대해 고민해보신 적 있으신가요? errno 는 과연 thread safe 할까 아닐까? 다수의 thread 에서 errno 값을 마구 변경해대면 다른 thread 에서 보게 되는 errno 에도 영향이...

링크(link) 시 심볼(symbol), 함수이름 충돌(conflict) 방지하기

링크(link) 시 심볼(symbol), 함수이름 충돌(conflict) 방지하기

C 프로그램에서 완전히 동일한 이름을 가지는 함수가 둘 이상 존재할 때는 어떻게 동작하게 될지 궁금하지 않나요 ? 특정 파일 하나를 컴파일하여 object 를 만들 때는 해당 파일 내에 충돌되는 이름이 없으면 되겠지만, 만약 같은 이름의 함수를 가진 여러...

C 와 C++ 프로그램 링크(link) 방법 [두번째] : C++ 에서 C 의 함수 호출방법

C 와 C++ 프로그램 링크(link) 방법 [두번째] : C++ 에서 C 의 함수 호출방법

지난 시간에 mangling/demangling 에 대해 알아보았습니다. 자… 이번 시간에는 먼저 c++ 에서  c 의 함수를 호출하는 방법을 알아보도록 하죠. 먼저 지난 시간에 사용한 코드를 gcc 로 컴파일해둡니다. sh> cat test_func.c #include <stdio.h> void test_func(const char...

스택침범(Stack Overflow)을 막는 스택보호 (Stack Protection) 컴파일 옵션 : -fstack-protector

경험이 많은 프로그래머이건 적은 프로그래머이건 겪을 때마다 힘든 문제가 하나 있죠? ^^ 바로 문제를 발생시키는 코드는 잘 넘어가고 엉뚱한 어디에선가 SIGBUS 를 맞거나 이상한 동작을 하는 경우입니다. 차라리 문제를 발생시키는 코드에서 바로 죽어버리면 문제 해결이...

blosc – memcpy 보다 빠른 메모리 read/write

blosc – memcpy 보다 빠른 메모리 read/write

메모리에 대한 접근이 워낙 느리니 캐쉬와 압축을 이용해서 memcpy 보다 더 빠르게 하는 기술도 있군요. blosc.orgSending Data from Memory to CPU (and back) Faster than Memcpy by Francesc AltedWhy Modern CPUs Are stArving And WhAt...

shared library 사용하기

shared library 사용하기

1. library source 파일 작성 /* shlibtest.c */ #include <stdio.h> int aa() {     printf(“aa\n”); } int bb() {     printf(“bb\n”); }   2. shared library 빌드 gcc -shared -fPIC -o shlibtest.so shlibtest.c   3....