2017-01-14 6 views

답변

1

OpenOnload는 미리로드 된 공유 라이브러리가 있음 libonload.so으로 감지 할 수 있습니다.

이 경우 응용 프로그램 환경에는 LD_PRELOAD=libonload.so 문자열이 포함됩니다.

또는로드 된 공유 라이브러리를 모두 열거하고 libonload.so을 확인할 수 있습니다.

#include <string> 
#include <fstream> 
#include <iostream> 

// Checks is specific SO loaded in current process. 
bool is_so_loaded(const std::string& so_name) 
{ 
    const std::string proc_path = "/proc/self/maps"; 
    std::ifstream proc(proc_path); 

    std::string str; 
    while (std::getline(proc, str)) 
    { 
     if (str.find(so_name) != std::string::npos) return true; 
    } 

    return false; 
} 

int main() 
{ 
    std::cout 
     << "Running with OpenOnload: " 
     << (is_so_loaded("/libonload.so") ? "Yes" : "No") 
     << std::endl; 
    return 0; 
} 
+0

위대한,하지만로드 된 SO를 열거하는 방법? – cassini

+0

@cassini 업데이트 된 답변보기. – Rost