본문 바로가기

전체 글

(426)
PLT & GOT PLT ( procedure Linkage Table ) - 외부 프로시저를 연결해주는 테이블- PLT를 통해 다른 라이브러리에 있는 프로시저를 호출하여 사용할 수 있다. GOT ( Global Offset Table )- PLT가 참조하는 테이블- 프로시저들의 주소가 들어있다. 전반적인 PLT와 GOT의 흐름은 다음과 같이 정리된다. 함수 호출 ( PLT 호출 ) -> 함수의 실제 주소가 쓰여져있는 GOT로 점프 -> GOT 참조 -> 해당 함수로 점프 만일 , 첫 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 일련의 과정을 통하여 주소를 알아낸다. 호출이 두번이상 반복되면 첫 호출때 알아낸 주소로 바로 점프한다. 이렇게 참조하는 과정에서 주소를 변조하여 우리는 프로그램의 흐름을 변경시킬수 있다...
#1. Reverse Engineering 리버싱 기초 낙서장. 어셈블리어 : CPU가 이해하는 기계어와 1:1 매칭되는 low level 언어. CPU 아키텍처마다 어셈블리어가 다르다. -> 즉 , 많은 어셈블리어가 존재한다.기호로 이루어져 있어서 되게 직관적이다 상용되어지는 문법은 2개이다. ( Intel , AT&T )일반저인 형태 : 명령 operand1 , operand2(operand : 연산의 대상으로 레지스터나 숫자 등이 올 수 있다. ) ex1) AT&T) mov $0x1, %eaxex2) Intel) mov eax, 0x1 이번글에서는 Intel 문법을 이용하겠다. 레지스터 : 값을 담아놓는 공간 ( = 다기능변수 ) , CPU에 존재하며 여러가지 레지스터가 존재한다. 범용 레지스터 ( x86 기준)eax : accumulato..
Linux 환경에서의 메모리 보호기법 이번 글에서는 리눅스 환경에서 사용되는 메모리 보호기법들에 대하여 요약해보도록 하자! 기법들에 대하여 알아보기 전 , 메모리 보호 의 정의에 대하여 알아둘 필요가 있다. 메모리 보호란 ? 말 그대로 , 컴퓨터에서 사용하는 메모리의 사용을 제어하는 방법을 칭한다. 컴퓨터의 운영체제에서 실행 되어지는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이 메모리의 주된 목적이며 , 이를 통하여 프로세스 내의 버그가 다른 프로세스의 동작에 영향을 미치는 것을 예방하고 멀웨어가 시스템에서 허가되지 않은 접근권한을 갖고 시스템에 영향을 끼치는것을 막는다. 이제 실제 리눅스 환경에서 사용되어지는 메모리 보호기법들에 대하여 알아보자. 1) ASLR : Address Space Layout Rand..
C 정리2 Function- 큰 작업을 작은 작업들로 나눈다.- 코드의 재사용성을 높인다. 함수의 정의- 필요로 하는 함수를 정의해서 사용할 수 있다.- main함수 또한 정의하여 사용하는 함수다. 프로그램이 실행되면 운영체제에서 가장 먼저 호출하는 함수가 main() 이다.함수의 prototype을 선언해놓으면 함수의 내용을 나중에 정의할 수 있다.또한 함수의 prototype에서는 인자의 이름을 생략할 수 있다. 헤더파일-stdio.h : standard input / output ( 입출력과 관련된 함수들 )-string.h : 문자열과 관련된 함수들-math.h : 수학과 관련된 함수들-stdlib.h : 메모리 관리 , 랜덤 등 다양한 함수를 제공이 외에도 다양한 표준 라이브러리 헤더파일이 존재한다. st..
C 정리1 메모리에 저장되는건 0,1 뿐이며 메모리에 동일하게 저장되어 있더라도 여러 방법으로 읽을 수 있음.따라서 메모리에 데이터를 읽고 쓸 방법 ( 자료형 ) 을 정해줘야 한다. -변수의 선언과 초기화 지역변수는 초기화하지 않으면 쓰레기값이 들어가고 전역변수와 static변수는 초기화하지 않으면 0으로 초기화 된다. 문자열 상수 - 0개 이상의 문자들의 sequence , 문자열의 끝을 알려주기 위하여 맨 뒤에 Null ( '\0' )이 붙음. 심볼릭 상수 - 값을 변경할 수 없는 변수로 const 키워드를 사용. 반드시 선언과 동시에 초기화해야 한다. 연산자산술 연산자 : + , - , * , / , % 관계 연산자 : > , >= , < , != , == ...etc논리 연산자 : && , ||증감 연산자 ..
오랜만에 어쩌다보니 오랜만?에 글을 적는다ㅜㅜ 수업을 마치고 과제를 하는척? 하다가 집에 돌아왔다.. 한것도 없는데 벌써 12시를 훌쩍 넘겼다. 오늘은 오랫동안 지켜보며 많은 생각을 하게 만들었던 단체에 면접을 보고왔다. 나에게 있어서는 정말 뜻깊은 일이였다.. 꼭 합격해서 같이 공부하고싶다..ㅜㅜ 나도 일원이 될 수 있길 바라며 이 글을 시작으로 잠시 휴식기를 가졌던 블로그 활동을 시작해야겠다고 다짐했다.
리눅스 프로세스 메모리 구조 및 여러 기초정보 (ORANG 참조 ) env , etc , argv , argc 또한 stack의 일부분임. kernel : 커널영역은 사용자의 접근을 못하도록 할당해 놓았다.OS의 시스템 코드가 로드되는 부분으로 우리가 건들 수 없다. Stack : 프로그램에서 사용되는 각종 환경변수 , 파라미터 , 리턴값 , 지역변수 등의 정보를 담고 있다. user space ( libc ) : 프로그램이 내부에서 사용하는 라이브러리 함수들과 관련된 공유라이브러리 파일이 적재되는 영역 Heap : 동적 할당되는 변수의 데이터가 위치하는 영역 Bss , Data : 프로그램에서 사용하는 전역변수 , 정적변수 등 각종 변수들이 실제로 위치하는 메모리 영역. 변수가 초기화되면 데이터 영역 , 초기화되지 않으면 bss 영역에 있다. 그리..
환경변수란 ? /* ( 참조 블로그 : https://m.blog.naver.com/PostView.nhn?blogId=koromoon&logNo=220793570727&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F ) */ 환경변수 : 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임으로 쉘에서 정의되고 실행하는 동안 프로그램에 필요한 변수를 나타냄. (1) 동작 범위에 따른 환경변수크게 세 가지 카테고리로 분류가능 1. 로컬 환경 변수 - 현재 진행중인 세션에서만 동작하는 환경 변수2. 사용자 환경 변수 - 특정 사용자에 대해서만 정의된 환경 변수로 로컬 터미널 세션 , 원격 로그인 세션을 사용하여 로그인할때마다 로드됨.3. 시스템 전체 환경 변수 - 해당..