2009-04-10 6 views
4

C#의 특정 하위 문자열에 대해 큰 바이너리 파일을 검색하는 가장 좋은 방법은 무엇입니까?C# - 패턴의 이진 파일 검색

내가 실행에서 DWARF 정보를 추출하기 위해 노력하고있어, 몇 가지 세부 사항을 제공하기 위해, 그래서 난 단지 (즉 섹션에서는 문자열 .debug_info, .debug_abbrev로 시작하는 등) 바이너리 파일의 특정 부분에 관심

Stream, FileStream 또는 BinaryReader에 아무 것도 보이지 않으므로 덩어리를 읽고 문자열의 데이터를 직접 검색해야합니다.

더 좋은 방법이 있습니까?

답변

6

검색 기능을 제공하는 .NET에 내장 된 기능이 없으므로 청크 파일로 읽은 다음 찾으려는 항목을 검색해야합니다.

두 가지 방법으로 검색 속도를 높일 수 있습니다.

먼저 버퍼 처리 된 IO를 사용하고 한 번에 큰 청크를 전송하십시오. 바이트 단위로 읽지 마십시오. 64KB, 256KB 또는 1MB 청크를 읽으십시오.

둘째, 원하는 조각에 대한 선형 스캔을 수행하지 마십시오. 문자열 검색을위한 Boyer-Moore (위키 백과 링크) 알고리즘을 확인하십시오. 원하는 DWARF 정보를 검색하는 데이 알고리즘을 적용 할 수 있습니다.

0

BinaryReader는 바이너리 파일에서 텍스트를 검색하도록 설계되지 않았다고 생각합니다. 그러나 검색 할 때 사용하는 텍스트 인코딩에 유의해야합니다.

1

interop을 컴파일하고 사용할 수있는 DWARF C 라이브러리가 있어야합니까? 나는 수색을하고 this을 발견했다. 라이브러리가 Windows에서 DLL로 컴파일 될 수 있다면 (예를 들어, Windows를 사용한다고 가정 함) System.Runtime.InteropServices를 사용하여 DLL과 상호 작용하고 거기에서 정보를 추출 할 수 있습니다.

아마도?

+0

예, 이진 파일 형식을 올바르게 구문 분석하는 것이 좋습니다. –