2012-06-29 4 views
0

나는 x86-64에서 리눅스를 사용하고있다. 사용자 프로그램이 코드 실행을 시작하기 직전에 시스템 호출 (OS에 트랩이 필요함)을 삽입해야합니다 (하지만 로더/링커가 라이브러리를 매핑 한 후 등). 아무도 바이너리 수정/재 컴파일이 필요없는이 을 달성하는 가장 좋은 방법은 무엇입니까?메인 바로 전에 시스템 호출하기

+3

왜 바이너리 수정을 필요로하지 않고 이와 같은 작업을 원하십니까? 저를 위해 당신은 당신이 사람들을 배포하고 스파이 할 소프트웨어를위한 추적 소프트웨어를 만들고 싶습니다 ... xD지만 제발 내가 틀렸다고 정정 해주세요. :) – evotopid

답변

2

libc 앞에 LD_PRELOAD 환경 변수를 사용하면 _start가 실제 main() 함수를 시작하는 데 사용하는 것으로 보이는 __libc_start_main에 대한 호출을 차단합니다.

또는 디버거처럼 프로세스에 연결하려면 ptrace()를 사용하십시오.

+0

나는 이것으로 조금 놀아 왔습니다. 내 자신의 __libc_start_main()을 정의하면 호출 된 것을 얻는 것이 쉽고 dlsym과 RTLD_NEXT를 사용하여 원본 주소를 찾는 것처럼 보이지만 지금까지 원본 또는 반환을 호출 할 수 없었습니다. 나는 적절한 함수 시그니처를 찾지 못했고 스택을 손상시키고 있기 때문에 이것이 의심 스럽다. eglibc 소스에서이 함수의 실제 정의를 찾는 것이 쉽지 않습니다. –

관련 문제