본문 바로가기

메모리(Memory)영역 - 코드영역(code segment) 메모리 영역을 공부하기 전에 '세그먼트'(segment) 와 '영역'이라는 표현에 대해서 같은것인지에 대해서 긴가민가 했었는데 공부를 하면서 아래 그림과 같이 이렇게 나누어진 영역을 세그먼트(segment)라고 한 다는 것에 대해서 알 수 있었다. CPU가 읽어 해설할 수 있는 기계어들이 위치하게 되는 영역을 말한다. 우리가 작성한 메인 프로그램의 기계어 코드가 바로 이 영역에 위치하게 된다. 보통 첫번째로 실행 가능한 명령어는 이 세그먼트(segment)의 맨 처음에 위치하며, 운영체제(OS)는 프로그램 실행을 시작하기 위해 그 위치를 알고 있다. 이름이 의미하듯이, 코드 세그먼트(CS) 레지스터는 코드 세그먼트의 주소를 의미한다. 그리고 우리가 코딩한 것을 실행을 시키면 CPU가 알아서 코드영역에 저.. 더보기
지역변수(local variable) 지역변수는 선언된 지역(선언된 중괄호 안)을 벗어나 버리면 메모리 공간에서 소멸된다.여기서 중요한 사실은 자동으로 소멸이 된다는 것이다. 그래서 지역변수를 가리켜 '자동변수(automatic variable)'라고도 부른다. 이처럼 잠깐 사용하고 삭제되는 데이터이기 때문에 지역변수와 매개변수는 스택(stack)영역에 쌓이게 된다. cf. 지역변수는 대입 연산자를 통해서 초기화가 이뤄지지만, 매개변수는 함수호출시 전달되는 인자 값을 통해서 초기화가 이뤄진다. [출처] 도서 : 난 정말 C Programming을 공부한 적이 없다구요! (윤성우 지음) 더보기
setUID란? Set이란 말은 '변경하다'란 뜻을 가지고 있고, UID는 여러분도 아시다시피 User ID의 약자이다. 따라서 SetUID는 'ID를 변경한다.'라고 해석된다. 설명하자면 SetUID는 일시적으로 자신의 ID를 변경하는 것을 말한다. 그럼 왜 일시적으로 자신의 아이디를 변경할까? 예) linux에서 개인계정 비밀번호호 변경시 /etc/shadow 도 변경이 된다. 이 때 passwd 명령어를 실행하는 동안에 '루트로의 일시적인 아이디 변경'이 되는 것이다. 결국 shadow 파일은 사용자의 권한이 아닌 root 권한으로 변경이 된 셈이다. 정리하자면1. SetUID는 파일에 걸린다!2. SetUID가 걸린 파일을 실행하면 나의 아이디가 변경된다.3. 파일의 실행이 끝나면 다시 원래의 아이디로 돌아온다... 더보기