안녕하세요.
제가 so를 만들었는데요.
nm으로 so를 보게 되면, export된 함수들을 볼 수 있는데,
일부 라이브러리들을 보게 되면,
symbol을 모두 숨겼는데요.
nm으로도 확인할 수 없는 export함수를 만들려면 어떻게 해야 되나요??
또 숨기더라도 라이브러리 사용시에는 문제가 없는건지...
export 된다는 것은, 해당 라이브러리를 참조하는 프로그램을 컴파일할때, 함수의 "이름" 을 가지고 해당 함수의 주소를 찾아 호출 할 수 있다는 것입니다.
일례로, static 으로 scope 를 한정시킨 함수의 경우, 다른 파일에서 접근할 수 없으나, 해당 함수의 메모리 주소값을 이용해 호출할 수도 있습니다.
함수를 export 시키지 않는다(심볼이름을 공개하지 않겠다)라면, 함수 주소를 외부에서 알아 갈 수 있는 경로를 만들어 주고, 그 함수 주소와, 해당 함수의 프로토타입을 공지해주면, 함수 주소를 해당 함수의 프로토타입으로 캐스팅해 호출할 수 있습니다.
http://nicesj.com
https://nicesj.comhttps://blog.nicesj.com
윈도우에서는 함수 이름 대신 번호를 이용해서, 사용할 수가 있었는데...
리눅스에서는 어떻게 만들어야 되는건지 좀 막막하네요.. ㅜ.ㅡ
so을 만들때 추가 옵션으로 지원하는 링커들이 있습니다. hp cc나 aix xlc 들은 있습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
흠..
export 된다는 것은, 해당 라이브러리를 참조하는 프로그램을 컴파일할때, 함수의 "이름" 을 가지고 해당 함수의 주소를 찾아 호출 할 수 있다는 것입니다.
일례로, static 으로 scope 를 한정시킨 함수의 경우, 다른 파일에서 접근할 수 없으나, 해당 함수의 메모리 주소값을 이용해 호출할 수도 있습니다.
함수를 export 시키지 않는다(심볼이름을 공개하지 않겠다)라면, 함수 주소를 외부에서 알아 갈 수 있는 경로를 만들어 주고, 그 함수 주소와, 해당 함수의 프로토타입을 공지해주면, 함수 주소를 해당 함수의 프로토타입으로 캐스팅해 호출할 수 있습니다.
http://nicesj.com
https://nicesj.com
https://blog.nicesj.com
구현을 할려면 어떻게 해야 할까요?
윈도우에서는 함수 이름 대신 번호를 이용해서, 사용할 수가 있었는데...
리눅스에서는 어떻게 만들어야 되는건지 좀 막막하네요.. ㅜ.ㅡ
so을 만들때 추가
so을 만들때 추가 옵션으로 지원하는 링커들이 있습니다.
hp cc나 aix xlc 들은 있습니다.
댓글 달기