我在C++程序中的指针/地址不存在于/proc/../smaps文件中

问题描述 投票:0回答:0
#include <stdio.h>
#include <iostream>
#include <fstream>

typedef unsigned long long ULL;

static void find_vaddr_in_smaps(ULL vaddr) {
    std::cout << "Vaddr to be searched for is " << std::hex << vaddr << std::endl;

    // create a copy of /proc/self/smaps as reading this can be racy.
    std::string cmd("rm -rf ./smaps_cpy_pcd");
    system(cmd.c_str());
    cmd = "cp -rf /proc/self/smaps ./smaps_cpy_pcd";
    system(cmd.c_str());
    const std::string smapsFileName("./smaps_cpy_pcd");
    std::ifstream smapsStream;
    smapsStream.open(smapsFileName.c_str());
    if (!smapsStream.is_open()) {
        std::cout << "Error: could not open file " << smapsFileName << std::endl;
        return;
    }

    while (smapsStream.good()) {
        std::string line;
        getline(smapsStream, line);

        ULL mapstart, mapend;
        int rc = sscanf(line.c_str(), "%llx-%llx", &mapstart, &mapend);
        if (rc == 2) {
            std::cout << "Found range is " << std::hex << mapstart << ":" << std::hex << mapend << std::endl;
        }

    }
    smapsStream.close();
}

int main()
{
    int* A = (int*)malloc(1000 * sizeof(int));
    *A = 10;
    printf("Allocated int pointer(%llx) has value = %d\n", A, *A);

    find_vaddr_in_smaps((ULL)A);

    return 0;
}

从 smaps 打印我的地址和范围。 A* 的打印地址不在 smaps 打印的范围内..

Allocated int pointer(614c20) has value = 10 
Vaddr to be searched for is 614c20 
Found range is 400000:423000 
Found range is 623000:624000 
Found range is 624000:625000 
Found range is 625000:647000 
Found range is 7ffff6d57000:7ffff6d6e000 
Found range is 7ffff6d6e000:7ffff6f6d000 
Found range is 7ffff6f6d000:7ffff6f6e000 
Found range is 7ffff6f6e000:7ffff6f6f000 
Found range is 7ffff6f6f000:7ffff6f73000 
Found range is 7ffff6f73000:7ffff6f75000 
Found range is 7ffff6f75000:7ffff7175000 
Found range is 7ffff7175000:7ffff7176000 
Found range is 7ffff7176000:7ffff7177000 
Found range is 7ffff7177000:7ffff71d7000 
Found range is 7ffff71d7000:7ffff73d6000 
Found range is 7ffff73d6000:7ffff73d7000 
Found range is 7ffff73d7000:7ffff73d8000 
Found range is 7ffff73d8000:7ffff759c000 
Found range is 7ffff759c000:7ffff779b000 
Found range is 7ffff779b000:7ffff779f000 
Found range is 7ffff779f000:7ffff77a1000 
Found range is 7ffff77a1000:7ffff77a6000 
Found range is 7ffff77a6000:7ffff77aa000 
Found range is 7ffff77aa000:7ffff79a9000 
Found range is 7ffff79a9000:7ffff79aa000 
Found range is 7ffff79aa000:7ffff79ab000 
Found range is 7ffff79ab000:7ffff79b2000 
Found range is 7ffff79b2000:7ffff7bb2000 
Found range is 7ffff7bb2000:7ffff7bb3000 
Found range is 7ffff7bb3000:7ffff7bb4000 
Found range is 7ffff7bb4000:7ffff7bd8000 
Found range is 7ffff7bd8000:7ffff7dd7000 
Found range is 7ffff7dd7000:7ffff7dd8000 
Found range is 7ffff7dd8000:7ffff7dd9000 
Found range is 7ffff7dd9000:7ffff7ddb000 
Found range is 7ffff7ddb000:7ffff7dfd000 
Found range is 7ffff7ff4000:7ffff7ffa000 
Found range is 7ffff7ffa000:7ffff7ffc000 
Found range is 7ffff7ffc000:7ffff7ffd000 
Found range is 7ffff7ffd000:7ffff7ffe000 
Found range is 7ffff7ffe000:7ffff7fff000 
Found range is 7ffffffdd000:7ffffffff000 
Found range is ffffffffff600000:ffffffffff601000
c++ linux memory-management
© www.soinside.com 2019 - 2024. All rights reserved.