C||C++

독되C-2

Yongbaldae 2023. 5. 2. 01:06

찾았다. 시스템 프로그래밍에서 나를 엿먹였던 문제의 해결점을.

char 대신에 const char 사용하라는 오류가 뜬다.

하지만 cpp확장자가 아니라 c로 바꾼다면?

사라졌다. 

.

.

.

문자열이 어떻게 메모리에 저장되는가?

f5를 눌러서 위에 코드를 디버깅해보자.

6번줄까지 실행되었을 때, 메모리를 보면 pszParam 이라는 문자열은 아스키코드로 잘 저장되어있다.

근데 여기서 메모리상에서 Hello를 TEST_로 변경해보자. 그리고 f10을 눌러 디버깅을 진행시키면

위와 같이 문자열이 출력된다. 분명히 난 pszParam의 주소를 찾아가서 메모리를 위변조하였으나, "Hello world" 를 문자열 상수로 취급하고 printf 로 출력하였을 때 pszParam에서 위변조시켰던 "TEST_world" 가 출력되었다.

즉, 똑같은 문자열은 변수로 지정하든, 직접 작성을 하든 메모리상에서 같은주소를 가리킨다.

 

cmd에서 디버그 실행시켜보는 법....

만일 HXD(16진수 편집기)를 사용하여 실행파일에서 Hello를 찾아 위변조 시키면,

위에서 보았던 디버그했을때 위변조한 내용이 출력된다.