보안 관련 단계를 구현 중이므로 LLVM IR 함수 단계의 일부로 사용자 지정 기본 블록을 주입하고 있습니다.특정 기본 블록에서 LLVM IR 최적화 피하기
나중에이 기본 블록을 최적화하지 않도록이 기본 블록을 표시하는 방법이 있습니까?
보안 관련 단계를 구현 중이므로 LLVM IR 함수 단계의 일부로 사용자 지정 기본 블록을 주입하고 있습니다.특정 기본 블록에서 LLVM IR 최적화 피하기
나중에이 기본 블록을 최적화하지 않도록이 기본 블록을 표시하는 방법이 있습니까?
나는 아주 솔직한 제안이 없습니다. 그러나 고려해야 할 사항이 몇 가지 있습니다.
원하는 최적화 수준 (예 : opt -O3
)과 관련된 모든 최적화가 적용된 후에 기본 블록 주입을 적용 할 수 있습니까? (당신이 묻고 있기 때문에 나는 의심 스럽습니다.)
나는 (당신이 당신의 기본 블록에서하는 일에 따라) 어떤 최적화를 피하기를 원하지는 않습니다. 예를 들어, -simplifycfg
의 효과에 신경 써야합니까? 즉, 주입 된 기본 블록을 선행/후속 블록과 병합하는 것입니다.
기본 블록 코드가 상당히 일반적인 경우 해당 블록을 별도의 함수에서 설명하고 매개 변수로 필요한 입력을 제공하고 을 피하기 위해 __attribute__((noinline))
으로 표시하는 것이 좋습니다.
그렇다면 기본 블록의 모든 메모리 액세스를 volatile
으로 선언하여 최적화를 방해 할 수 있습니다. this을 살펴보십시오.
편집 : 또한이 기능을 장식하고 opt
및 관련 패스에 의해 최적화 동안 스킵 할 수있는과 Attribute::OptimizeNone
있다. LLVM
님의 소스에서 걸러진 특성 (aka grep
)을 팔로우 할 수 있습니다.
충분하지 않고 일반적인 차단 목록/허용 된 사이트 기능을 알지 못하기 때문에 나는 번거로운 대안 만 생각할 수 있지만 아직 게시하지 않을 것입니다.