본문 바로가기

system/material

c++ std::string

c++ stdstring

c++ std::string 클래스에 대해 정리해보려 한다.

이걸 공부하게 된 계기는

 

std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string(v1)

위와 같은 mangling된 c++ 함수를 분석하고자였다.

 

위 구문은 스택 오버플로우에서 std::string(v1)과 동일하다고 말하고 있다.

 

이 string 클래스는 우리가 일반적으로 문자열을 다룰 때 사용하는 char와는 차이가 있다.

 

char형 배열, char형 포인터로 문자열을 다룰 때 char형 배열은 esp를 늘려 쭉 입력하는 형태이고 char형 포인터는 해당 주소에 문자열 주소를 가지고 있는 형태이다.

 

string 클래스로 문자열을 다뤄보기 전에 구현부를 보고 가자.

 

대충 의사 코드로 표현하면 위와 같이 생겼다. 실제로 string 클래스를 이용하여 할당한 후 메모리 값을 확인해 보겠다.

 

위 코드를 실행해 보겠다. (codegate 2018 SuperFtp code)

 

'seongjo'를 입력한 후 [ebp-0xac]를 쭉 확인해 보면

위와 같이 addr, length, 문자열 형태로 저장이 되어있음을 알 수 있다.

 

그리고 string 클래스로 입력받을 시 버퍼 오버플로우가 안나더라.. 초과된 부분을 heap에 allocate하여 저장한다.

 

c++ 잘하고싶다..


'system > material' 카테고리의 다른 글

2019 codegate preliminary 풀이 보고서  (0) 2019.02.01
dynamic, static, pie..  (0) 2019.01.24
fastbin dup consolidate 정리  (0) 2019.01.22
x86, x64 srop 정리  (0) 2019.01.21
glibc 2.26 tcache 동작 분석 및 exploit (how2heap)  (2) 2019.01.15