1d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman#include <errno.h> 2d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman#include <fstream> 3d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman#include <iostream> 4d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman#include <regex> 5d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman#include <string> 6d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman#include <string.h> 7d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman 8d661642651a6689c76d3f575b4b5dbf04e6b75bddcashmanint main(int argc, char * argv[]) { 9d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman if (argc != 2) { 10d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman std::cerr << "usage: " << argv[0] << ": libname\n"; 11d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman return -1; 12d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman } 13d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman std::regex reg(std::string("^([a-f0-9]+)\\-[0-9a-f]+\\s+.+\\s+(\\d+)\\s+.+\\s+\\d+\\s+") + std::string(argv[1]) + std::string("\\s*$")); 14d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman 15d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman /* open /proc/self/maps */ 16d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman std::string ln; 17d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman std::ifstream m_file("/proc/self/maps"); 18d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman if (!m_file) { 19d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman std::cerr << "Unable to open /proc/self/maps " << strerror(errno) << "\n"; 20d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman return -1; 21d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman } 22d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman while (getline(m_file, ln)) { 23d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman std::smatch sm; 24d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman if (std::regex_match (ln,sm, reg)) { 25d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman if (std::stoi(sm[2]) == 0) { 26d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman std::cout << sm[1]; 27d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman return 0; 28d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman } 29d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman } 30d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman } 31d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman return -1; 32d661642651a6689c76d3f575b4b5dbf04e6b75bddcashman} 33