2012-04-25 2 views
3

저는 LD_PRELOAD를 가지고 놀고 인쇄하기 전에 인쇄 할 문자열을 대문자로 변환하는 함수에 단순히 puts()를 래핑하는 라이브러리를 작성했습니다. 무엇은이전체 경로를 입력하지 않고도 명령 실행을위한 LD_PRELOAD 환경 변수 설정

$ pwd 
/home/adrian/test 

처럼들이받은 때 다음 명령을 실행할 때 예상대로 동작

$ /bin/pwd 
/HOME/ADRIAN/TEST 

그러나이 작동하지 않는 작품을 이제 너무

$ export LD_PRELOAD=/home/adrian/test/myputs.so 

로 LD_PRELOAD 변수를 수출 이 경우에 LD_PRELOAD 환경 변수가 무시되는 메커니즘은 무엇입니까?

답변

3

pwdshell builtin command입니다. man bash 또는 docs here을 참조하십시오. 따라서 작성하는 경우

$ pwd 

그러면 내장 명령이 실행됩니다. 경로를 지정하면 ELF 바이너리가 실행되고 LD_PRELOAD가 사용됩니다.

+2

감사합니다. 빠른 검색 후에'enable -n pwd'를 사용하여 내장 된 pwd를 비활성화 할 수 있다는 것을 알았고 예상대로 작동합니다. – eltommo

+0

@eltommo, 와우, 나는이 가능성을 알지 못했다. 흥미 롭 군! – TMS