hooky 0.2.0

Convenient LD_PRELOAD hooker
Documentation
use crate::elf::ObjectInfo;
use std::ops::ControlFlow;
use libc::c_void;

pub unsafe fn initialize_dlsym() -> *mut c_void {
    ObjectInfo::each( |info| {
        if info.name_contains( "libdl.so" ) || info.name_contains( "libc.so" ) {
            if let Some( pointer ) = info.dlsym( "dlsym" ) {
                return ControlFlow::Break( pointer )
            }
        }

        ControlFlow::Continue(())
    }).unwrap_or( std::ptr::null_mut() )
}

pub unsafe fn initialize_dlvsym() -> *mut c_void {
    ObjectInfo::each( |info| {
        if info.name_contains( "libdl.so" ) || info.name_contains( "libc.so" ) {
            if let Some( pointer ) = info.dlsym( "dlvsym" ) {
                return ControlFlow::Break( pointer )
            }
        }

        ControlFlow::Continue(())
    }).unwrap_or( std::ptr::null_mut() )
}

pub unsafe fn initialize_libc_dlsym() -> *mut c_void {
    ObjectInfo::each( |info| {
        if info.name_contains( "libc.so" ) {
            if let Some( pointer ) = info.dlsym( "__libc_dlsym" ) {
                return ControlFlow::Break( pointer )
            }
        }

        ControlFlow::Continue(())
    }).unwrap_or( std::ptr::null_mut() )
}