[질문] gcc 함수 호출시 인자로 넘기는 포인터 변수,,
글쓴이: kernelmaker / 작성시간: 화, 2009/02/17 - 2:45오후
안녕하세요^^ 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 으로 해주면
잘 찍힙니다.
이게 왜 이렇게 되는지 당췌이해가 가지 않습니다. 하루종일 자료찾고 삽질중입니다 ㅠㅜ
알려주세요~~
Forums:


댓글 달기