일반적인 방법으로 포인터를 사용해서 한 프로세스에서 다른 프로세스로 접근이 가능한가요??
글쓴이: thslrtoo / 작성시간: 수, 2013/06/26 - 5:12오후
운영체제는 가상 메모리라는 방법을 사용해서
프로그램의 코드가 연속적이게 보이도록 만드는걸로 알고 있습니다.
가상 메모리 때문에 한 프로세스가 다른 프로세스의 영역을 건드리지 못하도록 설계되어 있는데요.
그렇다면 일반적인 방법으로 C나 C++의 포인터를 사용해서
다른 프로세스의 메모리로(코드 영역으로) 접근이 가능한가요??
책의 설명을 보면 포인터를 잘못 사용하면 다른 프로세스의 메모리 영역을 침범하게 된다고 써져있는데
이게 어떻게 가능한건가요??
Forums:
memory protection이 안되어 있는
memory protection이 안되어 있는 system에서는 그럴 수 있습니다. (DOS?)
일반적인 경우, 요즘 OS에서는 불가능합니다.
shared memory를 쓰거나 ptrace(2)를 써서 할 수는 있지만, 제한적입니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
'다른 프로세스의 메모리 영역을 침범' 못하게 하기
'다른 프로세스의 메모리 영역을 침범' 못하게 하기 위해서 보통은 오류를 뿜으면서 강제 종료 당합니다.
책이 잘못 쓰여져 있네요 보호 모드에서 작동하는
책이 잘못 쓰여져 있네요
보호 모드에서 작동하는 운영체제는 다른 프로세스의 메모리를 침범하지 못하게 합니다
리눅스나 유닉스 계열에서는 세그먼트를 침범하려고 하면, 공포의 11번 시그널(segment violation)으로 강제 종료시켜버리죠
일반적이진 않은데 경우에 따라 dll
일반적이진 않은데 경우에 따라 dll injection 같은 기법으로 남의 영역에 배놔라 감놔라 할 순 있습니다.
윈도 말고 다른 os에서도 동일하게 가능할지는 모르겟는데 윈도는 저 방식으로 남의 프로세스 영역에 참견합니다.
흔히 안좋은 방식으로 활용되곤 하는 기법인데 경우에 따라선 저 방식이 사실상 유일한 방법이라 저 방식을 쓰는 상용제품도 있고요.
댓글 달기