런타임시 (LD_PRELOAD
), Linux에서 fopen()
과 같은 C 함수를 인터셉트/후크하는 방법은 무엇입니까? 나는 파이썬에서 이것을하고 싶다. (따라서, 나는 이미 프로그램이 CPython VM을 실행하고 있다고 가정하고있다.) 또한 파이썬 코드로 경로를 바꾸고 싶다. 나는 공유 라이브러리 함수를 후킹하는 것으로 충분하다. 또한 프로그램을 실행하는 방식을 변경하지 않고도이 작업을 수행하고 싶습니다.리눅스에서 Python의 C 함수를 동적으로 삽입하는 방법 (LD_PRELOAD없이)?
하나의 아이디어, 또는 dlsym()
로 또는 PLT에있는 코드를 재 작성하고, ctypes
-generated C-호출 기능을 타겟팅 내 자신의 도구를 ptrace()
에 따라 출시하는 것입니다,하지만 난 여기에 먼저 물어 거라고 생각했다. 감사.
* LD_PRELOAD를 사용하면 어떨까요? –
하위 수준의 작업을 수행하려면 기본 모듈을 작성해야합니다. Python에서 PLT에 액세스하여 수정하는 경우 (가능할 수도 있음) Python VM을 시작하는 코드가 필요합니다. –
@Matt Joiner : 질문을하는 방식에 따라, 나는 당신이 말한 것을 싫어합니다. 어떤 경우에는 당신이 더 구체적 일 수 있다면 생산적/건설적 일 것입니다. 그러나 당신이 정말로 묻고있는 경우에, 이것은 당신이 기능 중개를 비 동적으로하는 방법입니다 : http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick (그리고, 전에 많은 시간이 적용된) – Yang