2번 답이 잘못된 것 같습니다

더러운 퓨마 8시간 전
수정 삭제
정보보안기사 실기 23회
2. 64bits 리눅스에서 아래 프로그램 코드를 실행하려고 한다. printf를 통해 함수가 호출될 때 A, B, C 각 파라비터가 저장되는 레지스터 명을 기술하시오.
int main()
{ printf("%c, %c, %c\n", 'A', 'B', 'C');}

아래는 gpt 답변입니다.

 

맞아. 사람들이 말하는 “RDI에는 첫 번째 함수 인자가 저장된다”는 설명 자체가 정확해. 그런데 바로 그 규칙을 적용하면, 이번 문제의 정답은 RDI, RSI, RDX가 아니라 RSI, RDX, RCX가 돼.

헷갈리는 지점을 구분해 보자.

1. RDI는 첫 번째 인자를 저장한다

문제의 코드가 다음과 같지?

printf("%c, %c, %c\n", 'A', 'B', 'C');

여기서 printf() 함수에 전달하는 인자를 순서대로 세어 보면 돼.

첫 번째 인자 → RDI

"%c, %c, %c\n"

출력 형식을 지정하는 포맷 문자열

두 번째 인자 → RSI

'A'

세 번째 인자 → RDX

'B'

네 번째 인자 → RCX

'C'

즉, RDI가 첫 번째 인자를 저장한다는 사실과 'A'가 RSI에 들어간다는 사실은 서로 모순되지 않아.

2. 그런데 왜 해설에는 RDI, RSI, RDX라고 적혀 있을까?

가능성이 높은 설명은 해설에서 포맷 문자열을 제외하고 'A', 'B', 'C'만 세었기 때문이야.

하지만 이미지의 문제 코드가 정확히 저 형태라면, 함수 호출 규약에 따른 정답은 다음과 같아.

문제에서 묻는 값정답
A = 문자 'A'의 전달 위치RSI
B = 문자 'B'의 전달 위치RDX
C = 문자 'C'의 전달 위치RCX

참고로 'A', 'B', 'C'는 가변 인자 함수에 전달될 때 int로 승격되지만, 여기서 설명한 인자 순서는 바뀌지 않아.

결론: RDI는 첫 번째 함수 인자를 저장한다. 따라서 포맷 문자열이 첫 번째 인자인 이번 문제에서는 RDI, RSI, RDX가 아니라 RSI, RDX, RCX가 맞아.

댓글 개
0 0

모든 문제들의 저작권은 원저작권자에게 있습니다. 본 사이트는 웹상에 공개되어 있는 문제만 모아서 보여드립니다.
이용약관   데이터 보호 안내   제휴 문의

copyright 2026 뉴비티::새로운 CBT 시스템 - newbt.kr (Listed on LeanVibe)