2016-06-08 3 views
5

에서 다른 프로그램의 변수를 액세스, 그렇게, ID 기능을 사용하여 변수의 메모리 위치를 배울 수 :파이썬에서 C

X = "Hello world!" 
print(id(X)) # Output is equal to 139806692112112 (0x7F27483876F0) 

나는 C에서 포인터 변수에 액세스하려고 해요 (확실히 다른 프로그램이 아직 살아) :

#include <stdio.h> 

int main(void){ 
    char *x = (char *) 0x7F27483876F0; 
    printf("%s\n", x); 

    return 0; 
} 

나는, 오류 또는 경고를 코드를 컴파일하지 않습니다하지만 난이 분할 오류를주는 실행 프로그램 OS를 시도 할 때. 어떻게이 문제를 해결할 수 있습니까?

아니면 가능합니까?

+9

각 프로그램에는 자체 가상 주소 공간이 있습니다. 그래서 당신은 정말로 이것을 할 수 없습니다. –

+0

아마도 공유 메모리를 사용해야 할 것입니다 ... http://linux.die.net/man/3/shm_open –

+0

또는 procfs를 읽거나'ptrace'를 사용하십시오. – TartanLlama

답변

4

요즘 이와 같은 일을하는 것이 점점 더 어려워지고 있습니다. 주소 공간 레이아웃 무작위 화와 같은 기능을 사용하면 변수가 실제 메모리에로드되는 것을 제외하고는 지정된 프로그램이 실제로 어디에 있는지 알 수 없습니다.

최상의 방법은 일부 유형의 메시지 전달을 사용하는 것입니다. 왜 당신의 질문에 모든 downvotes 모르지만, 합리적으로 넣어 질문처럼 보이지만, 기술적으로 가능하지 요즘 요즘.

관련 문제