2011. 7. 3. 22:34

♧ strings는 바이너리 파일에서 문자열을 추출하기 위한 툴로서, GNU Binutils에 포함.

▷ strings를 이용하면 에러 메시지 검색 등 프로그램을 간단하게 분석해 볼 수 있음.

   

[ strings 사용법 ]

strings의 기본적인 사용법은 간단하다.

문자열을 추출하고자 하는 바이너리 파일을 인수로 넘기기만 하면 된다.

바이너리 파일은 /bin/ls와 같은 실행 파일이나

foo.jpg, bar.mp3와 같은 임의의 바이너리 파일 모두 가능.

   

▷ 표준입력으로부터 바이너리 데이터를 읽어 들여서 처리할 수도 있다.

strings는 grep명령과 함께 사용하면 편리하다.

다음 예에서는 'ignoring'이 포함된 에러 메시지를 검색 한다.

   

▷ 『-t radix 』 :: 문자열 앞에 파일의 오프셋을 출력

radix :: "x"-16진수, "d"-10진수, "o"-8진수

   

   

[ 문자열 판별 ]

▷ strings는 기본적으로 「ASCII 문자(7비트)로 구성된 4바이트 이상의 표현 가능한 문자열」

이라는 규칙으로 문자열을 판별한다. 이 때문에 UTF-8로 프로그램에 삽입해 놓은

한글 (8비트)은 기본적으로 출력되지 않는다.

   

const char *p = "한글 메시지 입니다.";

▷ UTF-8문자열을 출력하려면 strings 명령에 -eS 옵션을 사용한다.

-e는 인코딩, S는 8비트라는 의미.

단, -eS를 사용하면 알 수 없는 문자열도 많이 출력되므로 -n 옵션으로

출력에 필요한 바이트 수(기본 값 4)를 늘려서 출력될 문자열을 조절할 필요가 있다.

% strings -eS test

   

   

[ 오브젝트 파일 처리 ]

▷ strings는 내부적으로 BFD 라이브러리가 해석 가능한 오브젝트 파일

(실행 파일 또는 라이브러리 등)인지를 판별해서 오브젝트 파일인 경우에는

데이터 섹션만을 문자열 추출 대상으로 하게 된다.

이는 다음과 같이 C 프로그램에 포함된 문자열은 일반적으로 데이터 섹션에 포함되기 때문이다.

const char *p = "hello, world";

   

오브젝트 파일이 아닌 경우는 항상 파일 전체를 대상으로 문자열을 추출한다.

또한 표준입력으로부터 읽어 들인 경우 BFD로 판별할 수 없기 때문에,

이런 경우도 파일 전체를 대상으로 하게 된다.

[ -a | --all | - ]옵션 :: 강제적으로 파일 전체를 대상으로 검색.

[ -T ]옵션 :: 시스템 표준 외의 오브젝트 파일 형식을 지정.

  

  

Posted by devanix