|
질문하신 내용은 어셈블리나 C++에 관한 문제가 아니라
OS에 관한 내용입니다.
사용하시는 OS가 무엇인지요?
윈도우 계열 아닙니까?
그리고 직접 액세스 한다는 메모리가 물리적 메모리는 아니겠지요?
아시다시피 윈도우즈 계열(물론 다른 OS도 그렇겠지만 )은 물리적인 메모리 주소를
바로 사용하지 않고 모든 프로세스에 4기가 플랫 메모리를 지원하는 페이징 기법을 사용하고 있기 때문에 프로세스 입장에서는 실제 물리적인 메모리에 접근 할 수 있는 방법이 없습니다.
윈95나98의 경우는 win16과 호환을 위해 메모리 구조가 쫌 이상하기 때문에
4기가 메모리중 상위 2기가에 대해서는 되기도 합니다.
그래서 윈95에서는 Dos시절 runtime 라이브러리인 outport,inport같은 함수가
에러 없이 실행될 수 있는거죠..불안하긴 하지만요..
이것도 비졀씨만 풀어놓았고 씨빌더는 안전을 위해 라이브러리에서 아예 빼버렸습니다.
어쨌든.. 포인터에 메모리를 직접 넣을수는 있지만
OS가 그 메모리주소를 물리적인 메모리에 페이징 해서 할당 하지 않았기 때문에
그 주소를 사용한다면 Access fault가 날겁니다.
만약 OS로 도스를 사용 하시는거라면...
어셈블리나 씨나 메모리 어드레스 포인팅 하는 방법은 같습니다.
물론 포인터로 마음대로 메모리 지정하고 읽을 수 있는거죠.
권기식 님이 쓰신 글 :
: 안녕하세요?
: 어셈블리를 공부하다가 문득 C++로 메모리를 직접 엑세스 할 수 있을까라는 생각이 들었습니다.
: 포인터에 메모리 주소를 직접 할당할 수는 없을까요?
:
: 직접 넣으려고 하니 에러가 나던데...
:
: 어셈블리 코드를 바로 넣으면 되겠지만... 포인터를 이용하여 메모리의 내용을 볼 수 있는 방법이 있는지 궁금합니다.
|