BLOG main image
분류 전체보기 (222)
Reversing (13)
Pwnable (4)
Linux Kernel (3)
Crypto (2)
Wargames (66)
Programming (18)
Write Up (32)
Project (22)
Web (2)
My Life (52)
Memo (3)
etc (2)
발표자료 (1)
36,063 Visitors up to today!
Today 12 hit, Yesterday 30 hit
daisy rss
tistory 티스토리 가입하기!
2018.03.27 11:37


낮은 버전의 커널을 최신 혹은 높은 버전의 gcc로 컴파일 할 때 
cc1: error: code model kernel does not support PIC mode
라는 에러를 볼 수 있다. gcc특정 버전 이상에서는 pie적용이 기본으로 설정되어있어서 나는 오류이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
diff --git a/Makefile b/Makefile
index dda982c..f96b174 100644
--- a/Makefile
+++ b/Makefile
@@ -608,6 +608,12 @@ endif # $(dot-config)
 # Defaults to vmlinux, but the arch makefile usually adds further targets
 all: vmlinux
 
+# force no-pie for distro compilers that enable pie by default
+KBUILD_CFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CFLAGS += $(call cc-option, -no-pie)
+KBUILD_AFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CPPFLAGS += $(call cc-option, -fno-pie)
+
 # The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
 # values of the respective KBUILD_* variables
 ARCH_CPPFLAGS :=
cs

이 코드를 pie.patch로 만들고 커널 소스 최상위 디렉토리에서 

patch -p1 < pie.patch 해주면 된다. (Makefile을 다 설정해준 후에 해줘야한다.)

Name
Password
Homepage
Secret
2018.03.20 15:57

가끔씩 옛날 버전 컴파일 하다가 ____ilog2_nan 이거 없다고 에러날 때가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
diff --git a/include/linux/log2.h b/include/linux/log2.h
index ef3d4f67118c..07ef24eedf83 100644
--- a/include/linux/log2.h
+++ b/include/linux/log2.h
@@ -16,12 +16,6 @@ 
 #include <linux/bitops.h>
 
 /*
- * deal with unrepresentable constant logarithms
- */
-extern __attribute__((const, noreturn))
-int ____ilog2_NaN(void);
-
-/*
  * non-constant log of base 2 calculators
  * - the arch may override these in asm/bitops.h if they can be implemented
  *   more efficiently than using fls() and fls64()
@@ -85,7 +79,7 @@  unsigned long __rounddown_pow_of_two(unsigned long n)
 #define ilog2(n)                \
 (                        \
     __builtin_constant_p(n) ? (        \
-        (n) < 1 ? ____ilog2_NaN() :    \
+        (n) < 1 ? 0 :            \
         (n) & (1ULL << 63) ? 63 :    \
         (n) & (1ULL << 62) ? 62 :    \
         (n) & (1ULL << 61) ? 61 :    \
@@ -149,9 +143,7 @@  unsigned long __rounddown_pow_of_two(unsigned long n)
         (n) & (1ULL <<  3) ?  3 :    \
         (n) & (1ULL <<  2) ?  2 :    \
         (n) & (1ULL <<  1) ?  1 :    \
-        (n) & (1ULL <<  0) ?  0 :    \
-        ____ilog2_NaN()            \
-                   ) :        \
+        0           ) :        \
     (sizeof(n) <= 4) ?            \
     __ilog2_u32(n) :            \
     __ilog2_u64(n)                \
cs

이거 커널 소스 디렉토리에서 이거 붙여넣어서 ilog.patch로 저장하고 patch -p1 < ilog.patch 하면 지가 알아서 패치해준다.

그리고 다시 make ㄲㄲ

Name
Password
Homepage
Secret
2018.03.08 14:43
[etc]

sudo socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS08 하면 /dev/ttyS08 이 열림

minicom -D /dev/ttyS08 해서 시리얼 열고 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <termios.h>
#include <fcntl.h>
 
int main( void)
{
   int fd;
 
   struct termios newtio;
 
   fd = open( "/dev/ttyS8", O_RDWR | O_NOCTTY | O_NONBLOCK );
 
   if (fd == -1) {
       puts("open error");
       return 0;
   }
 
 
   memset( &newtio, 0sizeof(newtio) );
 
 
   newtio.c_cflag = B115200;
   newtio.c_cflag |= CS8;
   newtio.c_cflag |= CLOCAL;
   newtio.c_cflag |= CREAD;
   newtio.c_iflag = 0;
   newtio.c_oflag = 0;
   newtio.c_lflag = 0;
   newtio.c_cc[VTIME] = 0;
   newtio.c_cc[VMIN] = 1;
 
   tcflush (fd, TCIFLUSH );
   tcsetattr(fd, TCSANOW, &newtio );
 
   write( fd, "Hello, World!"13);
 
   close( fd);
 
   return 0;
}
cs

일케 소스 짜서 돌리면 minicom으로 Hello, World!가 옴

'etc' 카테고리의 다른 글

리눅스 가상 시리얼 포트 열기  (0) 2018.03.08
BMP File Header  (0) 2015.11.13
Name
Password
Homepage
Secret