[질문] gcc 함수 호출시 인자로 넘기는 포인터 변수,,

kernelmaker의 이미지

안녕하세요^^ KLDP로부터 도움많이 받고있습니다(^^)(__)(^^)
커널 개발중 질문드립니다~ 조금의 조언이라도 해주시면 무척 감사하겠습니다.

다음과 같은 코드를 컴파일 후 링커(ld)로 다른 오브젝트들과 링크를 합니다.

void func()
{
  char* strPrint = "Hello, world!!";		
  ConsolePrintStr(strPrint);	
  while(1);
}

링크된 결과(objcopy도함)로 떨어진 바이너리를 까보니, "Hello, world!!"는 0xE00 번지에 위치합니다.
strPrint의 포인터 값은 0x11000 입니다.
실제로 ld 할때 옵션중 -Ttext 0x10200 을 주었습니다.

ConsolePrintStr 안에서 보면 인자로 넘어온 포인터(0x11000) 을 그대로 사용하면 Hello, world!!가
찍히지 않습니다. 넘어온 포인터에서 0x10000을 빼준후 포인터 값을 0x1000 으로 해주면
잘 찍힙니다.

이게 왜 이렇게 되는지 당췌이해가 가지 않습니다. 하루종일 자료찾고 삽질중입니다 ㅠㅜ
알려주세요~~