-1

액세스 위반 예외가 발생하지 않고 프로그램에 할당 된 메모리 외부의 메모리 청크에 액세스 (읽기 또는 해제) 할 수있는 방법이 있습니까? 글쎄, 실제로이 점을 제외하고는 메모리 클리너 (시스템 가비지 컬렉터)가 어떻게 작동하는지 이해하고 싶습니다. 나는 항상 그런 프로그램을 만들고 싶었다. 현대의 운영 체제가 다른 프로세스에 속하는 메모리를 액세스하는 하나 개의 프로세스를 방지 할 수프로그램에서 할당 한 메모리 외부로 액세스. (다른 응용 프로그램의 메모리 액세스)

+0

언어는 문제입니다. 이 질문은 사용자에게 어떤 운영 체제와 언어가 관련되어 있는지를 묻지 않고 대답 할 수 없습니다. – bmargulies

답변

1

간단한 대답 (내가 잘못 생각한 것)은 없습니다. 일반적으로 2 가지 이유로 좋은 생각이 아닙니다. 첫째, 프로그램과 다른 프로그램 사이에 신뢰 문제를 야기하기 때문입니다. 인간은 여러분의 응용 프로그램을 신뢰하지 않을 것입니다. 둘째, 다른 응용 프로그램 메모리에 액세스하여 응용 프로그램을 변경하지 않고도 응용 프로그램을 알면 응용 프로그램이 중단되고 (바이러스가이를 수행합니다) 응용 프로그램이 중단됩니다.

가비지 수집기는 런타임에서 호출됩니다. 런타임은 메모리 공간을 "소유"하며 다른 응용 프로그램이 해당 메모리 공간에서 "실행"할 수있게합니다. 이것이 가비지 컬렉터가 존재할 수있는 이유입니다. OS가 메모리를 할당하는 런타임을 생성하고, 런타임이 애플리케이션의 권한하에 애플리케이션을 실행하게하고, 권한 아래 GC를 사용하도록해야합니다. 응용 프로그램 개발자가 런타임이 아닌 (OS가 아닌) 메모리를 "요청"할 수있게 해주는 계기 나 API를 허용해야하며 런타임은 이러한 요청에 대한 응답뿐만 아니라 해당 메모리 공간을 추적 할 수있는 방법을 제공합니다 해당 응용 프로그램에 할당합니다. 응용 프로그램에서 이러한 호출을 사용할 수있게 해주는 프레임 워크 (DLL 세트)가 필요할 것입니다 (개발자가 응용 프로그램 내부에서 요청을 작성하기 위해이 호출을 사용합니다).

가비지 수집기가 실행중인 응용 프로그램에 사용되는 메모리 이외의 메모리를 제거하지 않도록해야합니다. 동시에 런타임에 1 개 이상의 응용 프로그램이 실행될 수 있습니다.

희망이 도움이됩니다.

+0

예, 도움이되었습니다. 감사. – Auxiliary

4

번호

:

감사합니다 사전에 (언어는 문제가되지 않습니다).

실제로 가상 메모리를 이해했다면 불가능하다는 것을 이해할 수 있습니다. 각 프로세스에는 자체 가상 주소 공간이 있습니다.

+0

... 런타임 또는 CLR에서 실행하지 않는 한 true입니다. – Phillip

+0

@Philip : 런타임 또는 CLR조차도 다른 프로세스의 주소 공간에 액세스 할 수 없습니다. 적어도 운영 체제의 도움 없이는 안됩니다. 운영 체제는 일반적으로 다른 프로세스 가상 주소 공간에 속한 실제 주소를 프로세스에 매핑 할 수 있습니다. –

+0

나는 당신과 여기에 동의하지 않습니다.런타임과 운영 체제 간의 관계가 필요하다고 말할 수는 있지만 런타임은 일반적으로 응용 프로그램 대신 메모리 공간을 요청합니다. 런타임은 작성자의 호출자이기 때문에 메모리 공간과 연결되어 있으며이를 모니터하고 제어 할 수 있습니다. (일반적으로 응용 프로그램과 공유 제어)하지만 나는 또한 런타임 자체에 의존 믿습니다. 나는 당신이 설명하는 방식을 다루는 런타임을 다뤄 본 적이 없지만, 결코 본 적이 없기 때문에 그들이 존재하지 않는다는 것을 의미하지는 않습니다. – Phillip

1

사실 올바른 대답은 YES입니다. 거기에 몇 가지 프로그램이 있습니다. (존재한다면 .. 가능하다는 것을 의미합니다 ...) 아마도 이것을 수행하기 위해 커널 드라이브를 작성해야하지만 가능합니다.

아를 - 그리고 나는 또 다른 예를 가지고 ... 디버거 명령을 첨부 ... 여기가 모두 다른 프로세스로 시작하더라도 다른 프로그램 메모리와 상호 작용하는 하나 개의 프로그램 .... 물론

입니다 - 메싱 다른 프로그램 메모리와 함께 .. 만약 당신이 무엇을하고 있는지 모르는다면 아마도 그것을 분쇄하게 될 것입니다 ...

+0

@Dani : 디버거의 경우 OS 지원과 높은 권한으로 다른 주소 공간에 액세스합니다. –

+0

@ 존 - 물론 이러한 것들이 없으면 이것을 할 수 없습니다 ... – Dani

+0

디버거가 호스트 프로세스를 통해 실행되는 경우가 있습니다. 호스트 프로세스는 응용 프로그램과 디버거를 생성합니다. 호스트가 메모리 공간을 소유하고 있기 때문에 응용 프로그램과 디버거 모두에게 적합하다고 여겨지는 메모리를 조작 할 수있는 공유 공간으로 제공합니다 (다시 말하면 응용 프로그램이 공간을 직접 소유하지 않는 호스트 프로세스가 필요합니다) – Phillip