리버싱 강의 Helloworld의 정적 분석-main 함수 분석-6번 슬라이드의 데이터 섹션 문제 답이 이해가 되지 않습니다.

질문하려는 문제를 캡처한 파일입니다.
1번째 질문 : 문제에서 두번째 "Hello, world!\n"는 문자열 상수 그 자체이니 .rdata영역에 저장되는 것을 이해하겠습니다. 그런데 qword_14001DBE0는 구조상 main함수 안에 있는 지역변수인데 왜 스택 영역이 아니라 .data영역에 저장되는 것인가요? 일단 선지가 3개 밖에 없어 답은 맞추었지만 이유를 모르겠습니다.
2번째 질문 : 분명 메모리 구조 강의에서는 .data, .rdata, .code 섹션들과 스택, 힙등만 나왔는데 위의 문제에서는 rodata라고 나옵니다. 구글링해보니 rdata로 표기하는 곳도 있고 rodata로 표기하는곳도 있던데 둘이 동일한게 맞나요?

#리버싱 #실습
작성자 정보
답변 2
avatar
김진우
대표 업적 없음
  1. .data 영역에 있는 문자열을 stack에 Push 합니다.
  2. 시스템에 따라 rdata도 있긴 한데 웬만하면 동일한 의미로 이해하시면 될 것 같습니다
2022.06.01. 23:36
2dedce
워게임 고인물

1
디컴파일된 소스의 함수 안을 보면 qword_14001DBE0가 선언되어 있지 않죠. 이것은 지역변수가 아니므로 stack에 들어가지 않습니다.
qword_14001DBE0는 전역변수입니다. 변수명에 있는 14001DBE0 는 이 값의 주소값을 나타냅니다. 지역변수라면 주소값이 있을리가 없겠죠. 지역변수는 rbp나 rsp에 대한 상대주소로 나타나니까요. 즉 이것은 전역변수고 data에 위치합니다.
2
C언어에서 문자열 리터럴인 "Hello, world!\n"는 read-only data(읽기전용 데이터)입니다. 이걸 간단하게 말하기 위해서 앞 글자를 따서 rodata라고 씁니다. rdata도 비슷한 것 같습니다.

2022.06.02. 20:30
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기