2017-09-18 8 views

답변

3

LD_PRELOAD을 살펴보십시오. 이 환경 변수는 실행 파일의 주소 공간에 주입되는 elf 공유 객체로 설정할 수 있습니다. 미리로드 된 객체의 함수는 다른 객체의 함수를 대체 할 수 있습니다. 귀하의 경우 lib.so가 내장되어 있지 않은 한이 작업이 가능합니다 -Bsymbolic. 심볼릭 링커 옵션은 링크 패스 내에서 내부 호출을 해결합니다. 따라서 lib.so에 func1이 포함되어 있고 -Bsymbolic으로 빌드 된 경우 해당 호출을 바꾸는 것이 매우 까다 롭습니다. 결국 lib.so를 변경해야합니다.

+0

실제로. 'fakechroot' 유틸리티의 소스를보고이 기술을 정확히 사용하여 open()과 같은 표준 라이브러리 호출을 다른 것으로 대체하는 좋은 방법을 찾아보십시오. –

+0

안녕하세요, 감사합니다. 훌륭한 답변입니다. – dsfdf

+0

@Sam Hartman이 명확 할 때 -'-Bsymbolic'은 *'lib.so' 내의'func1' *에 대한 호출이 중단 ("hooked")되는 것을 멈 춥니 다. 'executable'에서'func1' ('-Bdirect'는이 후자의 옵션을 멈춘 초기 실험이었고 생존을 위해 너무 많은 것을 망가 뜨 렸습니다.)에서 호출을 끼워 넣을 수 있습니다. –