2008-11-07 4 views
1

수정 된 버전의 printf로 라이브러리를 만든 다음 LD_PRELOAD를 호출하여 프로그램에서 printf를 호출 할 때 내 버전을 사용합니다. 누군가가 나에게 LD_PRELOAD를 사용하는 방법을 설명 할 수 있습니까? 그리고 내 코드 나 라이브러리에서해야 할 특별한 것이 있다면?LD_PRELOAD 사용에 대한 도움말

답변

-3

그것은 나쁜 생각처럼 보입니다. printf의 버전을 다른 이름으로 지정하지 않는 이유는 무엇입니까?

+0

이것은 답변이 아닙니다. – bukzor

5

대체 환경 변수 LD_PRELOAD을 대체 라이브러리의 전체 경로로 설정하기 만하면됩니다. 그 이후에 실행하는 모든 프로그램은이 라이브러리를 사용하려고 시도하므로 LD_PRELOAD이 실행하려는 프로그램을 호출하도록 설정하는 래퍼 스크립트를 만들 수 있습니다.

+4

또는 내가 선호하는 방법 (sh 또는 bash 사용) : LD_PRELOAD =/path/to/lib ./myProg –

2
  1. 내가 아는 한 모든 프로그램은 우선적으로 uid 또는 gid (suid 또는 guid 프로그램이라고 함)를 변경할 수 없습니다.
  2. 디버깅과 같은 특정 용도로만 사용해야합니다. 내가 아는 한 C에서 엘프 (elf)의 기능을 숨길 수 있습니다. 그러나 두 기술 - LD_PRELOAD과 섀도 잉은 extream 치료를 다루어야합니다. GLib 내부가 바뀌면서 gpgme 코드 (또는 gpg와 관련된 기타)에서 섀도 잉 g_malloc의 버그를 발견 한 것을 기억합니다.

간단한 대답은 -하지 마세요. 더 복잡한 경우 - 할 일이있는 경우에만 - 그리고 보통은하지 마십시오 (어떤 종류의 디버깅 소프트웨어를 작성하지 않는 한).

관련 문제