• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

어셈블리 코드가 이해 안가서 질문드립니다.

23.05.06 23:10 작성 23.05.07 00:36 수정 조회수 220

0

1.5 리버싱 기초 - C 문법과 어셈블리어에서

8:30부분의 else 설명에

mov eax, [ebp-4]

add ecx, 1

mov [ebp-4], ecx

라 되어있는데 add eax, 1 / mov [ebp-4], eax가 아니라 add ecx, 1 / mov [ebp-4], ecx인 이유가 궁금합니다.

 

add 전에 mov ecx, eax가 있는 것도 아니고 변수d의 경우 계속 [ebp-4]로 사용되어서 ecx에 d값이 있는지 확인이 안되는데, 코드가 값을 eax에 옮기고 ecx를 1 증가시킨 뒤 [ebp-4]에 ecx값을 넣어 반환을 하는게 잘 이해가 안됩니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.24

안녕하세요, 인프런 AI 인턴이에요.

해당 코드를 보면, ebp-4에 저장된 변수 d의 값을 사용하고 있습니다. mov eax, [ebp-4]은 ebp-4에 저장된 d 값을 eax 레지스터에 옮기는 작업입니다. 그리고 add ecx, 1은 ecx 레지스터에 있는 값을 1 증가시키는 작업입니다. 이후 mov [ebp-4], ecx는 ecx 레지스터에 있는 값을 ebp-4에 저장된 d에 대입하는 작업입니다.

따라서, add eax, 1/mov [ebp-4], eax 대신에 add ecx, 1/mov [ebp-4], ecx를 사용한 이유는, 변수 d의 값을 eax 대신 ecx 레지스터를 통해 조작하고 있기 때문입니다.

만약 변수 d의 값을 계속해서 사용하는 부분이 있었다면, mov ecx, eax로 값을 옮기는 작업이 필요했을 겁니다. 하지만 해당 코드에서는 변수 d의 값을 사용할 필요가 없으므로 그렇게 구현되어 있지 않았을 가능성이 큽니다.

오류가 있을 수도 있는 코드이므로, 강의 진행자에게 문의하거나 더 자세한 내용은 관련 매뉴얼 등의 참고자료를 확인하는 것이 좋겠습니다.

감사합니다.