전체 글

전체 글

    [C/C++]NULL, NUL, 0, \0 의 차이점을 알아보자.

    코드를 짜다보니 NULL , NUL, 0, \0 이것들의 차이점이 문득 궁금해졌습니다. 인터넷을 뒤져보니 이미 많은분들이 이것들의 차이점에 대해 적어 놓으셨더라구요. 헷갈릴 수있는 것들이기에 자세하게 정리해 보았습니다. NULL 혹은 0 먼저 NULL 부터 알아보겠습니다. NULL은 헤더파일에 정의된 매크로로 null pointer constant입니다. 컴파일러에 의해 (void*)0 으로 정의되어집니다. 일반적으로 C언어에서 stdio.h 파일, C++에서 iostream 헤더파일을 include 시에 사용할 수 있습니다. NULL은 0 주소를 의미하기 때문에 포인터 변수를 초기화 시에 사용합니다. 예를들어 .. char *ptr = NULL 과 char *ptr = 0 은 같은 의미라 볼 수 있습니..

    [PE파일] 특정 PE파일로부터 Export Table 주소를 구해보자.

    ★ windows 7 32bit 환경에서 진행하였습니다. 간단한 어셈블리 프로그램으로~ 특정 PE 파일로부터 Export Table 주소를 구해봅시다. Export Table 주소를 구하고, 더 나아가서 Export 하는 함수들의 주소까지 구해볼수 있겠죠. kernel32.dll 를 이용해봅시다. PEView를 이용하면 쉽겠지만 동적으로 Export Table 내의 함수들의 주소를 받아오기 위해서 간단한 어셈블리 프로그램을 짜보도록 하겠습니다. 먼저 kernel32.dll 의 base 주소를 알아야겠죠? mov eax, fs:[eax+0x30] // PEB 의 주소 FS = TEB을 가리키고있음 mov eax, [eax+0xc0] // PEB_LDR_DATA mov eax, [eax+0x14] // .e..

    [어셈블리어] FS Register 를 자세하게 알아봅시다.

    유저모드의 FS레지스터는 현재 프로세서의 TEB(Thread Environment Block)을 가리키고 있습니다. 이는 처음 한 프로세스 내의 처음 생성된 쓰레드부터 0x7ffde000으로 부터 쓰레드가 생성될때마다 4KB씩 감소면서 생성됩니다. 첫번째 쓰레드 : 0x7ffde000 두번째 쓰레드 : 0x7ffdd000 세번째 쓰레드 : 0x7ffdc000 .... 참고로 커널 모드의 프로세스에서는 FS 레지스터는 일반적으로 KPCR(Kernel Process Control Region)이라는 곳을 지칭하고 있는데 이는 XP 같은 경우 0xffdf0000 이라는 친숙한 주소의 값입니다. 물론 OS마다 다르지만 FS의 GDT 정보를 확인하여 KPCR을 찾으시면 되겠습니다. 출처: http://passke..