OS 커널 제작 중 궁금한점이 있습니다.
글쓴이: csm4338 / 작성시간: 목, 2013/04/11 - 10:31오전
char *a="asdf";
int i;
char *video=(char*)0xB8000;
for(i=0;i
{
*video++=a[i];
*video++=0x0f;
}
커널은 위에 보이는것처럼 간단하게 작성됐습니다.
visual studio로 컴파일을 해서 PE구조로 만들어져있지만 .text영역에 있는 코드만 실행하면 되기때문에 커널로 점프까지는 문제가 없습니다.
문제는 위에 처럼 문자열을 저장하고 있는 포인터의 주소를 모른다는건데요. 저렇게 돌려보면 asdf가 출력되는게 아니라 이상한 문자가 출력됩니다.
char *ptr=데이터영역 주소 이렇게 주고 ptr[i]를 출력하면 나오긴 하는데 제가 궁금한건 PE 구조에서 .text영역에는 .rdata영역에 대한 정보가 없는건가요?
소스를 실행하려면 .rdata영역의 어디에 필요한 데이터가 있는지 알아야될것같은데 PE view로 전체를 살펴봐도 그런내용은 없고 그냥 .rdata영역이 어디서부터 시작이다 하는것만 있는것같네요.
다른 OS 제작하시는분들은 이런문제를 어떻게 해결하셨나요?
Forums:
댓글 달기