본문 바로가기
Engineering/C/C++

C에서 특정 주소로 점프하기

by Humaneer 2009. 7. 24.

회사에 아는 선임분이 ARM 교육을 가셔서 부트 로더쪽 코딩으로 뭔가를 실습하는데, 잘 모르겠다고 메신저로 물어보시길

"C에서 특정 주소로 점프 하려면 우찌해야 하냐?"

참고로 부트로더의 역할을 내가 아는데로 간단하게 정리를 해보면

1. 뭔가를 한다 -_-   (보통 시리얼 통신(rs-232,)을 통해 커널이미지를 정해진 주소에 다운로드 시키게 된다)
2. 특정 주소(커널 이미지의 시작점)로 점프를 한다.
3. 끝 -_-

역시 .. 내가 아는데로 정리하니 ... 간단하다 -_- . 다시 말해 모르는게 속편하다는 거 ㅋ

아무튼 질문을 받고 내가 처음에 바로 떠올린건 인라인 어셈블리였지만, '어셈은 안돼~' 라는 말에 함수포인터를 써보기로 하였다. 커널(커널함수)의 리턴이나 인자는 없다고 가정하였다. 쉽게 말해 kernel의 코드가 다음과 같은 함수로 선언되어 있다고 한 것이다.  void kernel(void); 고로 요런 함수의 주소에 매핑되는 함수포인터를 사용하여 아래와 같은 코드가 나오게 되었다.


내가 짜놓고도 잘 될려나 하고 반신반의 했었는데, 잘 된다고 한다. ㅋ역시나 C로 못하는 것은 없다. C만세. -_-;