2008年2月26日火曜日

Electric Fence

Electric Fence
[indou@std tstPrg029]$ cat mem.c
#include
#include
#include
int main(int argc, char *argv[]) {
char *buf;
int i;
buf = (char *)malloc(10);
for (i = 0; i < 20; i++) {
fprintf(stderr, "%d\n", i);
buf[i] = i;
}
return 0;
}
[indou@std tstPrg029]$ ./mem
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem # <- プリロード

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
0
1
2
3
4
5
6
7
8
9
10
11
12
セグメンテーション違反です
[indou@std tstPrg029]$ export EF_ALIGNMENT=1 # <-- 4byte単位の境界合わせをしない
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
0
1
2
3
4
5
6
7
8
9
10
セグメンテーション違反です
[indou@std tstPrg029]$
[indou@std tstPrg029]$ export EF_PROTECT_BELOW=1
[indou@std tstPrg029]$ ./mem2
2
1
0
-1
-2
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem2

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
2
1
0
-1
セグメンテーション違反です
[indou@std tstPrg029]$ unset EF_PROTECT_BELOW
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem2

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
2
1
0
-1
-2
[indou@std tstPrg029]$

0 件のコメント: