[C/C++] 잘못된 변수 선언 및 초기화

윤찬호·2023년 1월 19일
0

에러

목록 보기
2/6

현상

SEED-CBC 암복호화 라이브러리(KISA)를 적용하는 중 발생한 오류.

A 프로젝트는 MFC를 이용해 SEED(CBC) 암복호화 생성기. (Visual Studio 2019, C++)

B 프로젝트는 A 프로젝트로 생성한 SEED 암호문을 복호화. (Visual Studio 2005. C)

A에서의 복호화 과정과, B에서의 복호화 과정 및 입력값이 동일한데 B에서 복호화 실패함.

해결

디버깅을 통해 찾아낸 문제의 코드는 아래의 변수 선언 및 초기화이다.

unsigned char a[17] = "";

A 프로젝트에서는 위 코드가 실행된 후 메모리 영역이 아래와 같이 초기화 된다.

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

B 프로젝트에서는 위 코드가 실행된 후 메모리 영역이 아래와 같이 초기화 된다.

38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

이후 소스 코드에서는 a[0]를 제외한 부분에 새로운 값이 할당된다.

복호화를 할 때 a[0] 값이 올바르지 않기 때문에 복호화에 실패한 것이다.


어떤 이유로 B 프로젝트에서 메모리가 저렇게 초기화 되었는지는 잘 모르겠다.
(Visual Studio 버전의 문제인지, C/C++ 파일의 차이가 있는 것인지, 프로젝트 속성 문제인디..)

하지만 확실한건 위와 같이 초기화를 하면 안 된다는 것이다.

문제의 코드를 봤을때 찜찜한 생각이 들었지만, 내가 작성한 코드가 아니였고 (기존에 작성되어 있던 코드) A 프로젝트에서 정상적으로 동작하기에, 무심코 넘어가 버렸다.

앞으로는 변수 선언 및 초기화에 있어 꼼꼼하게 체크하자!

unsigned char a[17] = {0, };

0개의 댓글