Hooking Library Function Calls

LD_PRELOAD 환경변수를 사용하면 로더가 프로그램을 로드할 때 동적 로드해야 할 바이너리 코드를 해당 변수의 값의 디렉토리에서부터 뒤지도록 합니다. 따라서 이를 이용해 malloc(), free() 등의 일반적으로 사용하는 라이브러리 함수를 우리의 구현으로 대체하거나 후킹할 수 있습니다. 이 글은 이런 방법으로 malloc() 을 후킹하는 방법을 예제를 통해 간단히 설명합니다. Original Program 먼저 다음과 같은 프로그램이 있을 수 있을 겁니다: #include <stdio.h> #include <stdlib.h> int main(void) { char *abc; abc = (char *)malloc(8); printf("malloced address: %p\n", abc); sprintf(abc, "hello\n"); printf("%s\n", abc); free(abc); return 0; } 단순히 malloc() 을 통해 8바이트 메모리를 할당받아 그 영역을 표시하고 종료하는 프로그램입니다....

April 10, 2019 · 2 min · 333 words · Me

Backtrace on C language program

디버깅 과정에선 현재 어떤 코드가 어떤 함수를 거쳐 수행됐는지를 통한 컨텍스트 파악이 중요합니다. Java, Python, Go 등 대부분의 언어가 이를 위해 콜스택을 뽑을 수 있는 기능을 제공하죠. C 언어의 경우 gdb 등을 사용하면 쉽게 이를 볼 수 있지만 경우에 따라선 gdb 를 포기하고 printf() 등에만 의존해야 하기도 합니다. 이를 위한 기능이 c 라이브러리에도 있습니다, backtrace() 함수입니다. man 에도 이에 대한 설명이 있습니다만, 여기서도 간단히 소개해 봅니다. Example Source Code 예제로 설명하는게 가장 쉽죠....

April 9, 2019 · 2 min · 247 words · Me

Backtrace on C language program

디버깅 과정에선 현재 어떤 코드가 어떤 함수를 거쳐 수행됐는지를 통한 컨텍스트 파악이 중요합니다. Java, Python, Go 등 대부분의 언어가 이를 위해 콜스택을 뽑을 수 있는 기능을 제공하죠. C 언어의 경우 gdb 등을 사용하면 쉽게 이를 볼 수 있지만 경우에 따라선 gdb 를 포기하고 printf() 등에만 의존해야 하기도 합니다. 이를 위한 기능이 c 라이브러리에도 있습니다, backtrace() 함수입니다. man 에도 이에 대한 설명이 있습니다만, 여기서도 간단히 소개해 봅니다. Example Source Code 예제로 설명하는게 가장 쉽죠....

April 9, 2019 · 2 min · 247 words · Me

Unit test for the Linux kernel using Kunit

업데이트 (2020-01-01): KUnit 은 v5.5 머지 윈도우 사이 메인라인에 머지되었습니다. 이 포스트 작성 시점 이후로 많은 KUnit 에도 많은 변화가 있었고, 따라서 아래 내용 중 일부, 특히 테스트 셋업과 수행 부분은 좀 많이 달라졌습니다. 해당 내용을 위해선 공식 문서 를 참고하시길 권장합니다. 또한, 최신 버전은 파이썬 버전 종속성이 생겨서 우분투 16.04 위에서는 문제를 겪으실 수 있습니다. 최신버전의 파이썬을 쓰시거나 그냥 우분투 18.04 를 사용하시길 권장합니다. 지난 2월 말에 FAST'19 학회를 다녀왔는데요, Ted Tso 도 왔더군요....

March 20, 2019 · 3 min · 546 words · Me

Unit test for the Linux kernel using Kunit

Update (2020-01-01): KUnit has merged in v5.5 merge window. From the writing of this post, it had some changes, so below content, especially the test setup and running will not work. Recommend you to refer to the official document in the kernel for detailed tutorial. It also has a python version dependency now, so you would encounter a problem with Ubuntu 16.04. Recommend you to use later Python or Ubuntu 18....

March 20, 2019 · 3 min · 624 words · Me