포인터는 메모리 주소 변수로 알고 있는데요.
제가 만일 어떤 실행되는 프로그램 주소를 알고 있고 또 그 프로그램의 어떤 메모리 값을 변경하고 싶은데 c언어 포인터를 이용해서 그 주소를 변경하게 하는 프로그램 개발이 가능할까요?
기본적으로 C언어는 포인터를 이용해 메모리 값을 변경하는 것이 가능합니다. 그만큼 자유롭고 또 위험하기도 하지요.
일단 변경하고 싶은 메모리 주소영역에 따라 다를텐데요. 당연한 얘기지만, 쓰기 가능한 영역이라면 변경은 가능하지요.
더 구체적인 설명은 담분에게 패쑤~^^;
정확히 원하시는 게 뭔지는 잘 모르겠지만, "다른 프로그램의 메모리 값을 변경"하는 것이라면 요즘 OS들은 다 프로세서 별 메모리를 따로 나눠서 관리하기 때문에 그냥 원하는 주소에 값을 쓴다고 되는 게 아니라 그 프로그램의 메모리를 건드리기 위해 따로 OS를 불러서 요청해야 합니다.
.
가능합니다. 프로그램 디버거들이 다 그렇게 동작하는 겁니다.
--------- 간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락 셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학 여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
예를 들어, A프로그램의 메모리 a라는 변수의 주소가 0x00AA일 때
B프로그램에서 A프로그램 a라는 변수를 접근하려면 당연히 다른 주소가 될텐데..(가상 메모리)
애초에 프로그램수준에서 다룰 수 있는 한계도 가상 메모리 주소까지가 한계니까요..
그리고 메모리 프로텍션은 또 어떻게 뚫죠? 프로세스간 통상적인 통신밖에 안해봐서..
너무 늦게 작성했습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
기본적으로 C언어는 포인터를 이용해 메모리 값을
기본적으로 C언어는 포인터를 이용해 메모리 값을 변경하는 것이 가능합니다.
그만큼 자유롭고 또 위험하기도 하지요.
일단 변경하고 싶은 메모리 주소영역에 따라 다를텐데요.
당연한 얘기지만,
쓰기 가능한 영역이라면 변경은 가능하지요.
더 구체적인 설명은 담분에게 패쑤~^^;
...
정확히 원하시는 게 뭔지는 잘 모르겠지만, "다른 프로그램의 메모리 값을 변경"하는 것이라면 요즘 OS들은 다 프로세서 별 메모리를 따로 나눠서 관리하기 때문에 그냥 원하는 주소에 값을 쓴다고 되는 게 아니라 그 프로그램의 메모리를 건드리기 위해 따로 OS를 불러서 요청해야 합니다.
...
.
가능합니다. 프로그램 디버거들이 다 그렇게 동작하는
가능합니다. 프로그램 디버거들이 다 그렇게 동작하는 겁니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
요즘 운영체제는 가상 메모리 + 메모리 프로텍션으로 단순한 방법으로 안되지 않나요?
예를 들어, A프로그램의 메모리 a라는 변수의 주소가 0x00AA일 때
B프로그램에서 A프로그램 a라는 변수를 접근하려면 당연히 다른 주소가 될텐데..(가상 메모리)
애초에 프로그램수준에서 다룰 수 있는 한계도 가상 메모리 주소까지가 한계니까요..
그리고 메모리 프로텍션은 또 어떻게 뚫죠? 프로세스간 통상적인 통신밖에 안해봐서..
답변인들에게 감사의 말씀을 드립니다.
너무 늦게 작성했습니다.
댓글 달기