요즘 Programming from the Ground Up을 보고 있습니다.

전에 KLDP에서 추천이 나온 책(관련글)이고,

선배가 적극 추천한 책이라 벼르고 있었으나

어쩌다 보니 이제서야 보고 있는 것이지요.^^;;;;

(게으름의 극치.;;;)

 

이 책이 마음에 드는 것은 리눅스 상에서 할 수 있다는 점입니다.

다른 책들은 대부분 MASM을 이용하더군요.

(HLA도 있었지만...)

이는 윈도우 상에서 해야 하는 것이라

저 같이 집과 사무실을 옮겨다니면서 공부하는 사람에게는

여간 불편한 일이 아니었습니다.

그런데 이 책을 가지고 서버상에서 놀 수 있으니

그게 정말 좋더군요.^^

 

잡담이 조금 길었습니다.

이 책에서 나오는 내용 중 함수 호출 시 반드시 해야 한다는 구문인

의 존재이유를 잘 몰랐습니다.

왜 예전의 ebp를 stack에 집어넣어야 하고,

esp를 ebp에 넣어야 하는지를 말이죠.

스택을 사용하는데 esp하나면 충분하지 않나 생각했습니다.

그러다 그 책에 나오는 예제를 분석하다가 그 이유를 알았지요.

 

위의 소스는 4! 즉, Factorial를 구현한 것입니다.

재귀함수의 대표적인 예이지요.

위 소스를 어셈하여 나온 결과물입니다.

24라 계산이 잘 되었군요.

이를 분석해 본 제 노트입니다.

 

저만 알기 위해 만든 노트이니 다른 분은 잘 모르시겠죠.^^;;

 

이 글을 적은 이유는 노트를 남기기 위함도 있지만,

질문을 남기기 위함입니다.

 

1. 함수 호출 시 esp는 stack의 top을

ebp는 호출한 함수의 base pointer를 가리키는가?

2. ret 호출 시 return address를 pop했을 것이므로

esp는 호출된 함수의 파라메터를 가리키는가?

3. 위는 base pointer addressing 방법인데,

다른 방법으로 호출하는 것은 어떤식일까?

 

제 생각에는 이미 보았으나 지나쳤거나

앞으로 해당 책에서 볼 수 있는 답이라 생각됩니다.

찾으면 덧글이나 추가글로 답을 적어야겠습니다.^^

 

참조

Programming from the Ground Up

Programming from the Ground Up 번역본

크리에이티브 커먼즈 라이선스
Creative Commons License

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/750

댓글을 달아 주세요

[로그인][오픈아이디란?]