2016-06-15 2 views
0

최대한 많은 정보를 숨길 싶습니다. ldd에서 정보를 숨기고 싶습니다. 따라서 동적으로 링크하는 대신 라이브러리에서 정적으로 링크하는 방법을 배우고 있습니다. 내가 올바른 구문은 따라서g ++ 공유 객체의 정적 버전을 연결할 수 없습니다.

g++ -ldynamiclib -o exe files.cpp staticlib.a 

또 다른 유래의 게시물에서 읽었습니다, 내 현재 컴파일 코드는 다음과 같습니다

STATIC_LIB="" 
STATIC_LIB="$STATIC_LIB ${PATH}/libcrypto.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libdl-2.5.so" // I couldn't find the .a version for this, so I tried doing it this way, and have also tried doing just -ldl 
STATIC_LIB="$STATIC_LIB ${PATH}/libstdc++.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libgcc.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libc.a" 

g++ -g -I${INCLUDE_PATH} -o executable file1.cpp file2.cpp $STATIC_LIB 

나는이 방법은 libcrypto을 위해 작동 ldd으로 확인했습니다, 내가 가져온 외부 라이브러리이기 때문에. 그러나 이것은 다른 모든 것들에 대해서는 전혀 작동하지 않으며, 내가 ldd을 사용했을 때 여전히 나열되어있는 것을 볼 수 있습니다. 누구든지 올바른 방법을 알고 있습니까?

P. 나는 또한 -static이나 -Wl, -Bstatic을 사용하는 등 몇 가지 다른 대안을 시도해 봤지만 그 중 하나를 사용할 수 없었다. 그것이 내 구문인지 아니면 단지 불가능한 것인지 확실하지 않습니다.

+0

'나는 ldd에서 할 수있는 한 많은 정보를 숨길 필요가 있다는 것에 대해 다소 궁금합니다. 어쩌면 XY 문제일까요? http://meta.stackexchange.com/a/66378 – renemilk

+0

프로그램 실행 방법을 분석하여 프로그램을 중단하는 방법에 대한 추가 정보를 얻는 것입니다. 리버스 엔지니어링. 누군가가 프로그램을 중단 시키거나 프로그램에서 정보를 얻으려고한다고 가정 할 때 가능한 한 많이 숨기려고했습니다. –

답변

1

libstdc++, libgcclibc는 점에서 특별하다 그 라이브러리 그들은 gcc로 컴파일 된 모든 프로그램의 실행에 매우 중요한 것. 특수한 gcc을 정적으로 연결하려는 경우 옵션이 존재합니다 (예 : -static-libstdc++-static-libgcc).

이러한 옵션을 선택하면 실제로 무엇을하고 있는지 알 수 있습니다. 프로그램에서 이식성 문제를 일으킬 수 있으며 그 중 많은 부분이 직관적이지 않은 방식으로 표현됩니다.

+0

전에 두 가지 옵션을 시도했지만, 사용하고있는 컴파일러는 꽤 오래되었고'-static-libstdC++'가 없습니다. 그리고'-static-libgcc'를 추가했을 때 나는'ldd'를 실행할 때 그것을 볼 수있었습니다. –

관련 문제