use libc::{c_char, c_int, c_void};use std::ffi::CString;
fn main() { unsafe {
let path = CString::new("libc.so.6").unwrap(); let lib = libc::dlopen(path.as_ptr(), libc::RTLD_LAZY);
if lib.is_null() { panic!("Failed to open libc"); }
let puts = CString::new("puts").unwrap(); let puts_fn: *mut c_void = libc::dlsym(lib, puts.as_ptr());
if puts_fn.is_null() { let msg = libc::dlerror();
if !msg.is_null() { let msg = std::ffi::CStr::from_ptr(msg).to_string_lossy().to_string();
println!("Failed to find puts function: {}", msg); }
}
let puts: extern "C" fn(*const c_char) -> c_int = std::mem::transmute(puts_fn);
let str = CString::new("Hello, World!\n").unwrap(); puts(str.as_ptr());
libc::dlclose(lib);
}