xref: /aosp_15_r20/system/extras/tests/kernel.config/scrape_mmap_addr.cpp (revision 288bf5226967eb3dac5cce6c939ccc2a7f2b4fe5)
1*288bf522SAndroid Build Coastguard Worker #include <errno.h>
2*288bf522SAndroid Build Coastguard Worker #include <fstream>
3*288bf522SAndroid Build Coastguard Worker #include <iostream>
4*288bf522SAndroid Build Coastguard Worker #include <regex>
5*288bf522SAndroid Build Coastguard Worker #include <string>
6*288bf522SAndroid Build Coastguard Worker #include <string.h>
7*288bf522SAndroid Build Coastguard Worker 
main(int argc,char * argv[])8*288bf522SAndroid Build Coastguard Worker int main(int argc, char * argv[]) {
9*288bf522SAndroid Build Coastguard Worker     if (argc != 2) {
10*288bf522SAndroid Build Coastguard Worker         std::cerr << "usage: " << argv[0] << ": libname\n";
11*288bf522SAndroid Build Coastguard Worker         return -1;
12*288bf522SAndroid Build Coastguard Worker     }
13*288bf522SAndroid Build Coastguard Worker     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*$"));
14*288bf522SAndroid Build Coastguard Worker 
15*288bf522SAndroid Build Coastguard Worker     /* open /proc/self/maps */
16*288bf522SAndroid Build Coastguard Worker     std::string ln;
17*288bf522SAndroid Build Coastguard Worker     std::ifstream m_file("/proc/self/maps");
18*288bf522SAndroid Build Coastguard Worker     if (!m_file) {
19*288bf522SAndroid Build Coastguard Worker         std::cerr << "Unable to open /proc/self/maps " << strerror(errno) << "\n";
20*288bf522SAndroid Build Coastguard Worker         return -1;
21*288bf522SAndroid Build Coastguard Worker     }
22*288bf522SAndroid Build Coastguard Worker     while (getline(m_file, ln)) {
23*288bf522SAndroid Build Coastguard Worker         std::smatch sm;
24*288bf522SAndroid Build Coastguard Worker         if (std::regex_match (ln,sm, reg)) {
25*288bf522SAndroid Build Coastguard Worker             if (std::stoi(sm[2]) == 0) {
26*288bf522SAndroid Build Coastguard Worker                 std::cout << sm[1];
27*288bf522SAndroid Build Coastguard Worker                 return 0;
28*288bf522SAndroid Build Coastguard Worker             }
29*288bf522SAndroid Build Coastguard Worker         }
30*288bf522SAndroid Build Coastguard Worker     }
31*288bf522SAndroid Build Coastguard Worker     return -1;
32*288bf522SAndroid Build Coastguard Worker }
33