GNU 어셈블리어 질문입니다.

tjsdnfksmd의 이미지

6개의 정수를 비교하는 문제입니다.
사진속에서 read_six_numbers 함수가 호출된 다음인 +34 부분에서 먼저 cmpl로 0x0과 (%rsp)를 하면 첫번 째 정수가 0이라는 것과, 그 다음 +40 +43 부분 실행 후 rbp에는 0, ebx에는 1이 저장된 후, jmp를 통해 +74 로 가서 +74 +76 +79 부분 실행 후 +62가서 +62 +65 +69 부분 실행하고, ebx가 6이 될때 까지 +62 부분부터 +79 부분을 반복하는거 아닌가요? 그러면 0 1 6 11 16 21이 되는거 아닌가요?

File attachments: 
첨부파일 크기
Image icon 캡처.PNG50.63 KB
익명 사용자의 이미지

csapp의 bomblab이군요. 추억이네요.

이런 건 담당조교에게 물어보세요. :)

bushi의 이미지

int six_numbers[6];
int ebx;
int *rbp;
 
if (six_numbers[0] != 0)
   explode_bomb();
 
rbp = &six_numbers[0];
 
for (ebx = 1; ebx != 6; ebx++, rbp++)
{
   int eax;
 
   eax = ebx;
   eax += rbp[0];
 
   if (eax != rbp[1])
      explode_bomb();
}

0, 1, 3, 6, 10, 15 ?
ㅇㅇ의 이미지

ㅋㅋ