← All Posts

[TIL] 260929 공부기록

c공부와 힙버퍼 오버플로우

TIL#

오늘 오전 오후에는 c23 표준을 정리되어있는 글을 좀 봤다 이유는 초반에 cs관련된 내용이 나오는데 공부에 집중이 안될때 읽고 정리해보면 좋을것같아서 5장까지 읽었다 역사부터 오늘날의 현대까지 정리되어있는글을 보고 흥미로웠던 부분도 많았고 엔디안이라는 것도 이번에 알게되었다 그래서 블로그 정리도 오후에 해보고, 읽으면서 불편했던점으로 첫 이슈를 남겨봤다.. 물론 가독성부분이긴하지만..

배운점#

그냥 기본적인 메모리주소와 값이 어떻게 블록으로 나뉘어져있는지 정도만 알았었는데 빅엔디안과 리틀엔디안이라는것을 알게됐다 워드라는 단어도 csapp 에서 버스를 할때 워드라는 단위를 쓴다 정도만 알고있었는데 워드는 cpu가 처리하기 편한 데이터 크기를 가리키는 용어로 정확한 의미는 또 다를순있다고 했다

여러 바이트가 하나의 숫자를 이루게 되면 문제가 생기는데 여기서 어느주소를 넣을지 정해야될때 대표적인 방법으로 나오는것이 빅엔디안과 리틀엔디안이다. 둘의 차이점을 이해했던 글은 엔디안를 참고해보면 좋을것같다 다음으로 디버깅 03번 문제를 풀면서 힙버퍼 오버플로우라는 개념을 알게됐는데 메모리 크기를 하나씩 확인하면서 원인을 찾아보려고 했다. gdb에 익숙해지고싶었는데 정말 기초적인 용어만 조금 이해했다.. 먼저 버퍼는 프로그램이 데이터를 저장하기 위해 사용하는 공간인데 만약 공간을 8개를 저장할수있는 공간을 만들었고, 배열에서 data[8]에 값을 저장하게되면 0부터 7까지가 할당된 공간이기때문에 data[8]은 메모리범위에 벗어난 접근이다.

결국 힙 버퍼오버플로우는 만들어 놓은 공간보다 더 바깥까지 접근하는 문제라고 이해했다

느낀점#

카나리 문제는 어셈블러때문에 매우 어려웠는데, 힙버퍼오버플로우는 gdb사용을 좀 더 익숙하게 다룰줄안다면 메모리리상태가 일치하는지 확인하는 과정들을 이해할수있겠다 싶었다.. 디버깅랩이 코드를 고치는건 쉬울지 몰라도 이러한 과정들을 이해하는게 많이 어렵게 느껴졌다.

ps.cs23의 글을 처음 블록에 작성해봤는데 누가 mz c언어라고 해서 좀 웃겼다..