본문 바로가기

분류 전체보기377

[System] 메모리 구조 운영체제로부터 프로그램을 실행할 메모리 공간(RAM)을 할당받는다. 이 메모리 내부 공간은 코드 영역, 데이터 영역, 힙 영역, 스택 영역, 커널 영역으로 나뉘어있다. 1) 코드 영역 : 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 불림 - 상수 저장 - 컴파일된 기계어 - CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리 - 프로그램이 시작하고 끝날 때까지 메모리에 남아있음 2) 데이터 영역 : 전역변수와 정적 변수가 저장되는 영역 - 프로그램이 시작하고 끝날 때까지 메모리에 남아있음 (전역변수의 특징 중 프로그램 시작과 종료까지 존재하는 이유이다.) 3) 힙 영역 : 사용자에 의해 메모리 공간이 동적 할당과 해제가 이루어짐 - 사용자가 직접 해야 하는 역영.. 2019. 11. 1.
[리버싱] 왜 스택은 높은 주소에서 낮은 주소로 채워질까? 사실 메모리 구조 부분을 리버싱 분류로 넣어야 할까 고민했지만, 스택 프레임을 조사하면서 힙과 스택의 비교하기 위해서 조사했기에 다른 공부를 할 때 더 조사하더라도 현재는 리버싱으로 분류해놓았다. 메모리 상에서 힙 영역, 스택 영역 : 힙과 스택 영역이 서로 반대로 데이터를 채워 나가기 때문에 서로의 영역을 침범할 수 있음 1) Stack Overflow : 스택이 힙 영역을 침범함 2) Hip Overflow : 힙이 스택 영역을 침범함 왜 스택은 높은 주소에서 낮은 주소로 채워질까? : 함수가 호출될 때 필요한 스택 메모리를 할당받는데, 이것은 함수 반환 후에 사용했던 해당 스택 메모리를 반환하여 전체적인 스택 메모리 상의 변경이 없어야 하기 때문이다. -> 결과적으로 제일 중요한 커널 영역을 침범하.. 2019. 11. 1.
[리버싱] 스택 프레임과 함수 프롤로그/에필로그 스택 메모리를 사용할 때 ESP, EBP, EIP 레지스터가 사용된다. 앞 전에 배웠던 레지스터들을 간단하게 정리하고 넘어가자. EIP 레지스터(Instruction Pointer) : 다음 실행할 명령어가 존재하는 메모리의 주소가 저장됨 EBP 레지스터(Base Pointer) : 하나의 스택 프레임의 시작 지점 주소가 저장됨 (Bottom) //새로운 함수가 호출되거나 실행 중이 함수가 종료되어 리턴될 때마다 값이 달라짐 ESP 레지스터(Stack Pointer) : 하나의 스택 프레임의 끝 지점 주소가 저장됨 (Top) //PUSH, POP명령에 따라서 ESP 값이 4byte씩 변함 -----------------------------------------------------------------.. 2019. 11. 1.
[리버싱] 리틀엔디안, 빅엔디안 CPU 종류마다 데이터를 메모리에 저장하는 방법이 다르다. 바이트 오더는 "리틀엔디안", "빅엔디안" 이 두가지 방식으로 저장하는데 여기서 엔디안이란? 컴퓨터의 메모리와 같은 1차원의 공간에 여러개의 연속된 대상을 배열하는 방법을 뜻한다. 먼저 바이트 오더를 말하기에 앞서 바이트를 알고가자. 1byte = 8bit이며, 1bit는 0과 1로 구성되어 있음을 알것이다. 1byte는 00000000으로 표현이 가능하고, 4byte인 정수를 표현하면 다음과 같다. 00000000 00000000 00000000 00000000 그럼 정수 1이 CPU마다 어떻게 저장되는가(리틀/빅 엔디안)을 예시를 보고 가도록 하자. 다음을 보면 알 것이다. 빅엔디안 : 00000000 00000000 00000000 0000.. 2019. 11. 1.
[리버싱] CMP와 TEST 명령어 차이 1) CMP - 형식 : CMP dest, src - 기능 : dest피연산자에서 src연산자를 묵시적으로 빼서 값을 비교한다. - 원칙 1) 뺀 값이 0일 경우 ZF가 1로 세트 되고, 다를 경우 0으로 세트 됨. 2) 처음 상태일 때는 NZ(Not Zero)로 ZF가 0이지만, 계산 값이 0일 경우 ZF가 1로 세트 되면서 NZ가 ZR로 변경됨. 3) 혼자 사용 X, 언제나 조건 점프 혹은 조건 이동 명령어와 함께 사용됨 2) TEST - 형식 : TEST opr1, opr2 - 기능 : 두 피연산자 사이에 논리적인 AND연산을 수행하여 ZERO 플래그에 영향을 주지만 결과값을 저장 X. - 원칙 1) OF, CF는 항상 0으로 세트 되고, 계산 값이 0일 경우.. 2019. 11. 1.
Introduction to Theory of Computation 2장_9 정리/설명 우리가 앞 전 시간에 Regular Language는 Union Operation, Computination Operation, Star Operation에 대해서 폐쇄성을 지닌다고 이야기했다. 그리고 그것들은 NFA와 DFA로 표현되고 또한 정규표현식으로도 표현할 수 있었다. 그러면 모든 Language들은 Regular Language일까? 정답은 "아니다". 따라서 이번 시간에는 Pumping Lemma 이론으로 Regular Language가 아님을 증명하는 시간을 가질 것이다. (Pumping Lemma) : Regular Language의 일반적인 성질을 기술한 이론이다. -> Regular language의 필요조건을 담고 있음. >> 비둘기 집의 원리를 이용 & state의 개수보다 긴 s.. 2019. 10. 11.