내가 알고 싶은 것은 스택의 데이터가 어떻게 변환되는지입니다. 0x80808080과 같은 데이터를 볼 수 있지만 이것이 무슨 의미가 있을까요? 숫자의 어떤 부분이 다른 것을 나타냅니까? "0x"는 무엇을 의미하나요?
내가 알고 싶은 가장 중요한 것은 데이터가 어떻게 구성되어 있는지입니다. 푸시와 팝이 어떻게 작동하는지 알고 있지만 다음 내용을 완전히 이해하지는 못합니다.
(gdb) x/300wx 0xbffff155
0xbffff155: 0x80808080 0x80808080
0xbffff355: 0x80808080 0x80808080
각 부분은 무엇을 의미하나요? ^ 나는 r=4 w=2 x=1 & -=0을 알고 있습니다
답변1
0x
16진수(즉, 16진수)로 작성된 숫자에 대한 매우 일반적인 접두사입니다.
x
는GDB 명령메모리의 일부를 표시합니다. 다음 숫자와 문자는 /
인쇄할 내용을 나타냅니다: 300단어( w
), 16진수( x
). 그 뒤의 숫자는 인쇄를 시작할 주소입니다.
"r=4 w=2 x=1"은 Unix 파일 권한의 숫자 및 기호 표현에 관한 것이며 전혀 관련이 없습니다.
프로세스 메모리의 임의 부분을 인쇄하면 유용한 데이터가 생성되지 않습니다. 디버깅 기호로 작성된 소스 코드와 바이너리가 있는 경우 디버거는 프로그램에 있는 각 변수의 저장 주소를 알려줄 수 있습니다. 이는 스택의 데이터에 대한 정보를 제공하지만 동적으로 할당된 메모리에 대한 정보는 제공하지 않습니다. 소스 코드가 없으면 디버깅보다 훨씬 복잡한 리버스 엔지니어링을 수행하는 것입니다.
이것중요성데이터의 의미, 즉 변수의 데이터가 나타내는 것은 컴퓨터가 말해 줄 수 있는 것이 아닙니다.
일반적으로 디버거가 표시하는 데이터를 이해하려면 프로그래밍 경험이 필요합니다. 이러한 데이터의 의미는 전적으로 프로그램에 따라 달라지며 일반적인 고려 사항은 포함되지 않습니다. 특정 프로그램과 그것이 어떻게 컴파일되었는지 파헤쳐 보지 않고서는 단지 숫자 묶음일 뿐입니다.