2009-12-27 5 views
1

특정 바이트 패턴에 대해 일부 메모리 범위를 검색하려고합니다. 따라서, 내 접근 방식은 메모리 범위의 패턴을 찾기 위해 Boyer-Moore-Horspool 알고리즘을 사용하여 함수를 구축하는 것입니다.일부 메모리 영역에서 바이트 패턴 찾기

wildcard 바이트는 와일드 카드로 처리해야하는 특정 바이트에 그대로 있습니다. 예 - wildcard0xCC 인 경우 0xCC, pattern은 모두 와일드 카드입니다.

이 함수는 처음 패턴을 찾은 메모리 범위의 시작 부분을 반환해야합니다.

내 질문이 있습니다. 비슷한 기능이 이미 가장 일반적인 라이브러리에서 이미 수행 되었습니까? 아니면 직접 구현해야합니까?

+0

여기서 "와일드 카드"는 무엇을 의미합니까? 일부 인터 프라테이션에서 와일드 카드는 0 개 이상의 일치를 의미 할 수 있으며, 다른 정의에서는 1 개 이상의 일치를 의미 할 수 있습니다. 귀하의 정의를 명확히하십시오. –

+0

와일드 카드는이 경우 정확히 하나의 일치입니다. 따라서 패턴이 0x1337f00d이고 와일드 카드가 0x37로 설정된 경우 0x13 ?? f00d와 일치해야합니다. 임의의 바이트입니다. – Etan

답변

3

BMH의 Wikipedia page에는 구현이 있습니다. Boost xpressive는 BMH의 변종에 기반한다고 생각합니다.

+0

questino는'windows.h' 또는 이와 유사한 표준 라이브러리에 이와 같은 함수가있는 것과 같습니다. – Etan

+0

내가 아는 한, 부스트의 표현을 살펴 보는 것이 아니다. – jason

1

아니요, 'strstr'과 같은 기능이 아닌 것 같습니다. 원시 메모리입니다. 혼자 가자!

+2

흠 ...'std :: search'가'strstr'처럼 작동하지 않겠습니까? gnu libc의'memmem' 대신에 그것을 제안하는 것은 아니지만, 그것이 존재하고 아마도, 아마도 작동합니다 ;-) –

관련 문제