2003년 10월 9일 목요일

ElectricFence-2.2.2 (Memory debugger) 설치하기

http://freshmeat.net/projects/efence/?topic_id=47
http://perens.com/FreeSoftware/
ftp://ftp.perens.com/pub/ElectricFence/

ElectricFence-2.2.2.tar.gz을 다운 받는 다.

tar xzvf ElectricFence-2.2.2.tar.gz

print.c 파일의 114번째 줄을 수정한다.
---------------------------------------
char c = va_arg(args, char);
---------------------------------------(수정전)
int c = va_arg(args, int);
---------------------------------------(수정후)

make로 컴파일 한다.
make

Makefile을 열어 prefix를 수정한다. (/home/ilashman/local/ElectricFence-2.2.2)

mkdir -p /home/ilashman/local/ElectricFence-2.2.2/bin
mkdir -p /home/ilashman/local/ElectricFence-2.2.2/lib
mkdir -p /home/ilashman/local/ElectricFence-2.2.2/man
mkdir -p /home/ilashman/local/ElectricFence-2.2.2/man/man3
make install

----------------------------------------------------------------
사용하기
----------------------------------------------------------------
.bashrc에 다음 내용을 추가한다.

export LD_LIBRARY_PATH=/home/ilashman/local/ElectricFence-2.2.2/lib:$LD_LIBRARY_PATH

g++의 컴파일 옵션에 다음 내용을 추가한다.
-L/home/ilashman/local/ElectricFence-2.2.2/lib -lefence

ldd [실행파일명]을 치면
        libefence.so.0 => /home/ilashman/local/ElectricFence-2.2.2/lib/libefence.so.0 (0x401dc000)
라는 부분이 있으면 성공적으로 링크된 것이다.


참고
oopsla.snu.ac.kr/~jwryoo/research/posix.html

.a 파일 : 정적 라이브러리
.so 파일 : 동적 라이브러리

=========================================================================
ElectricFence-2.1 의 page.c 의 patch 파일
=========================================================================
--- ../test/ElectricFence-2.1/page.c    1996-04-27 07:57:38.000000000 +0900
+++ ./page.c    2003-10-09 16:58:32.000000000 +0900
@@ -29,24 +29,10 @@

static caddr_t startAddr = (caddr_t) 0;

-#if ( !defined(sgi) && !defined(_AIX) )
-extern int     sys_nerr;
-extern char *  sys_errlist[];
-#endif
-
static const char *
stringErrorReport(void)
{
-#if ( defined(sgi) )
-       return strerror(oserror());
-#elif ( defined(_AIX) )
-       return strerror(errno);
-#else
-       if ( errno > 0 && errno < sys_nerr )
-               return sys_errlist[errno];
-       else
-               return "Unknown error.\n";
-#endif
+    return strerror(errno);
}

/*
=========================================================================

---------------------
참고)
Red Hat Linux release 9 (Shrike), 2.4.20-20.9smp kernel, g++ 3.2.2 에서는
efence 2.1은 make, make install은 되었으나 컴파일시 포함이 안되었다.
efence 2.2.2는 make, make install되고 컴파일시 포함도 된다.
그러나 실행에는 실패.

댓글 없음:

댓글 쓰기