2010-11-19 2 views
1

필자가 작업 한 코드의 일부분에서 쓰기 가능한 정적 데이터를 사용하는 곳에서 상수 데이터를 사용해야한다는 것을 발견했습니다.쓰기 가능한 정적 데이터 검색

"정적"-> "정적 const"에 대해 멍청한 검색 및 바꾸기를하지 않으면 모든 '정적'데이터가 쓰기 가능하지 않게 할 수 있습니다. 상수 문자열 데이터를 명시 적으로 만들 수있는 방법 쓰기 가능합니까?

저는 GCC 툴체인을 사용하고 있습니다. 개발 목표는 x86입니다.

+0

이렇게 추한 해킹을 사용하는 대신 코드를 수정하는 것이 좋습니다. –

+0

글쎄, 어떤 필드를/실제로/쓸 수 있어야한다, 빌드 요구 사항을 만들기 위해 신속하게 파생하는 것입니다. – Christoffer

답변

1

사용하는 라이브러리 중 일부에 쓰기 가능한 정적 데이터가있을 수 있습니다. (표준 C 및 C++ 라이브러리와 같은). 그 const 만들기 나쁜 것입니다.

코드를 살펴보고 수동으로 변경하는 것이 좋습니다.

nm을 사용하면 .o 파일의 기호 목록을 얻을 수 있습니다. nm 출력에서 ​​첫 번째 열은 기호 유형을 제공합니다. B, C, D, G 또는 S은 쓰기 가능한 데이터를 나타냅니다. 마지막 열은 (맹 글링 된) 변수 이름을 제공합니다. 작은 스크립트를 작성하여 nm 출력을 구문 분석하고 이러한 스크립트를 찾아 볼 수 있습니다.

+0

아 물론. 'nm | grep -i "[BCDGS]"'는 나에게 읽기 전용 섹션에없는 심볼 목록을 제공합니다. 실제 문제를보고 고의적 인 질문에 답하는 것만 큼 고마워 .-) – Christoffer

0

더 나은 방법은 모든 변수에 "const"를 추가하는 것입니다. 당신은 "#define static static const"(당신이 이미 그것을 바꿨을 때마다 깨질 것이라는 점에주의하십시오)를 사용할 수 있습니다. 그러나 이렇게하는 것을 권장하지 않습니다. (당신의 코드를 훨씬 덜 읽을 수있게 만들고 아마도 어떤 것들을 깨뜨릴 것이고, 정적 함수를 선언 할 수 있어야 함).