linux startup deamon, 리눅스 시작 서비스 관리
- 리눅스 시작 서비스 추가/삭제
$ sudo update-rc.d -f apache2 remove
$ sudo update-rc.d apache2 defaults
- 리눅스 실행중인 서비스 확인
$ service --status-all
Read more
$ sudo update-rc.d -f apache2 remove
$ sudo update-rc.d apache2 defaults
- 리눅스 실행중인 서비스 확인
$ service --status-all
메모리 확인, ASLR 설정
- 메모리 보기
/proc/$pid/map- ASLR 설정하기
임시로 끄기/proc/sys/kernel/randomize_va_stace0: OFF 1: ON(stack only) 2: ON(stack, heap)
영구적 끄기
sysctl -w kernel.randomize_va_space=0
c로 작성된 python module 만들기
c로 작성된 python module 만들기
C로 작성된 함수를 파이썬에서 import 해서 사용하기 위해서는 C로 작성된 프로그램 코드를 파이썬이 import할 수 있는 라이브러리 파일로 변환해 주어야 한다. (ubuntu 환경에서 할거임)
swig(Simplified Wrapper and Interface Generator)라는 툴을 사용하면 간단히 라이브러리파일로 만들어 낼 수 있다. swig는 파이썬뿐만 아니라 다른 언어에서도 C코드를 사용가능하게 라이브러리를 만들어주는 툴이다.
설치
sudo apt-get install swig
공식 홈페이지
www.swig.org
위의 간단한 코드를 라이브러리로 만들어서 파이썬에서 실행 시켜보자.
ex.c파일을 이용해서 ex.i 파일을 만들어줘야 한다. 보통 컴파일러를 사용하면 전처리기가 해주는 작업을 비스무리하게 직접하여 .i파일을 만들어 줘야 한다.
첫 번째 줄에는 %(module name)이 들어가고
%{
이 부분에는 사용하는 함수들의 선언, 전역변수(구조체)의 선언, define, 헤더파일을 extern으로 선언해준다.
%}
그리고 그 밑에는 그냥 한 번 더써준다.
ex.c파일을 이용해서 ex.i 파일을 만들어줘야 한다. 보통 컴파일러를 사용하면 전처리기가 해주는 작업을 비스무리하게 직접하여 .i파일을 만들어 줘야 한다.
첫 번째 줄에는 %(module name)이 들어가고
%{
이 부분에는 사용하는 함수들의 선언, 전역변수(구조체)의 선언, define, 헤더파일을 extern으로 선언해준다.
%}
그리고 그 밑에는 그냥 한 번 더써준다.
ex.c 파일과 ex.i 파일이 준비가 되었다. 이제 swig를 이용해서 만들면 된다.
swig -python ex.i
명령어를 실행하면 ex_wrap.c와 life.py가 생성된다. life는 모듈이름이고 ex는 c코드 파일명이다.
gcc -fpic -c ex.c ex_wrap.c -I/usr/include/python2.7
object 파일 두 개(ex.o ex_wrap.o)가 생성되었다. -I뒤에는 Python.h 를 참조할수 있게 파이썬이 설치된 경로를 넣으면 된다. 나머지 옵션은 man gcc에 들어가면 확인할 수 있다.
ld -shared ex.o ex_wrap.o -o _life.so
_life.so 파일을 뽑아준다. .so 파일이름은 반드시 _(module name)으로 해야한다.
python 을 실행하고 import 해서 사용할 수 있다.
굳~
C로 작성된 함수에서 인자로 포인터를 받는 경우 그냥 느낌에 맞게 넣자(char * 는 string형으로)
ctype의 (c_char_p) 이런걸로 형 맞춰줘도 되지 않는다.
unsigned char * 같은 걸 넘겨주려면 string (char *)으로 넘겨주고 C코드 안에서 인자를 받자마자 강제 형변환을 해버리니 잘 된다.
ex) argv[1] = (unsigned char *)argv[1]
함수의 결과 값을 return으로 받지 않고 argv의 구조체 인자로 받으면 받아지지 않는다.
피드 구독하기:
글 (Atom)
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
$(HOME)/.gdbinit을 생성하면 gdb가 실행될 때 .gdbinit을 불러옴으로 스크립트를 적용시킬 수 있다. ARM 어셈을 처음다루어 라인바이라인으로 분석해 보기위해 몇 가지 스크립트를 작성하였다. .gdbinit ...
-
UBUNUT SSH 서버에 접속 시도를 하면 로그인이 성공하기 전에 뜨는 배너와 로그인이 성공한 후에 뜨는 메세지가 있다. id, pw를 입력하기 전에 뜨는 배너는 디폴트 값으로 /etc/issue.net 을 읽어온다. issue.net 안...
-
라이브러리 로딩 - ld.so.conf 라이브러리란 무엇인가? 프로그램에서 공통으로 사용할 수 있는 기능을 포함하고 있는 오브젝트 파일이다. 동적 라이브러리란 무엇인가? 프로그램을 컴파일하여 생성되는 바이너리에 포함하지 않고 바이너리가...
-
Calling Convection 함수호출규약 은 함수(subroutine, callee)가 어떻게 인자를 전달받고 결과값을 반환하는지에 대한 로우레벨에서의 규칙이다. 다양하게 구현된 함수호출규약들은 파라미터의 위치, 리턴 값이나 리턴 ...