Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;寻找指针_C++_C_Memory_Pointers_Architecture - Fatal编程技术网

C++ C/C++;寻找指针

C++ C/C++;寻找指针,c++,c,memory,pointers,architecture,C++,C,Memory,Pointers,Architecture,我最近完成了一个基本的记忆扫描器,就像所有做过这个的人一样。。。我意识到每次程序启动时扫描值都是一件痛苦的事情 计算出这些值的基指针会很有用,这样就可以将它们硬编码到应用程序中。为了解决这个问题,我用Visual C++为我的“目标”创建了这个短的控制台应用程序。 但是,我无法找到一种可靠的方法来计算指针的内存地址,我可以执行哪些方法/计算来实现这一点?我知道,指针链存在着更逼真的例子,但这似乎是一个很好的起点,然后再让它变得更难。内存地址是malloc返回的任何内容。没有可靠的方法来计算它将返

我最近完成了一个基本的记忆扫描器,就像所有做过这个的人一样。。。我意识到每次程序启动时扫描值都是一件痛苦的事情

计算出这些值的基指针会很有用,这样就可以将它们硬编码到应用程序中。为了解决这个问题,我用Visual C++为我的“目标”创建了这个短的控制台应用程序。
但是,我无法找到一种可靠的方法来计算指针的内存地址,我可以执行哪些方法/计算来实现这一点?我知道,指针链存在着更逼真的例子,但这似乎是一个很好的起点,然后再让它变得更难。

内存地址是
malloc
返回的任何内容。没有可靠的方法来计算它将返回什么。这一切都取决于
malloc
库的工作方式,取决于操作系统(通过
sbrk
mmap
或其他)给出的虚拟地址范围等。

您询问的是如何预测将从
malloc
返回的地址

没关系

如果可以预测
malloc
将返回什么,那么
malloc
就不需要返回任何东西

实际上,除了
NULL
之外,从malloc返回什么地址并不重要。调用malloc意味着您需要大量字节的内存。马洛克会给你的。你得到了你需要的

相反,如果您可以确定从malloc返回什么地址,那么就永远不需要调用malloc。你可以只使用你预测的地址


简而言之,
malloc
之所以存在,是因为预测哪些内存可能可用并非易事。

为什么会这样做?@bitmask:因为代码是两种语言的可怕混合体。请注意,系统通常会执行地址空间随机化,以确保在不同的运行中不会获得相同的地址(安全措施)。
int main(int argc, char *argv[], char *envp[])
{
    unsigned int * Pointer1;
    Pointer1 = (unsigned int *)malloc(sizeof(unsigned int));
    char s[20];
    while(1)
    {
        std::cout<<"(Pid:"<<GetCurrentProcessId()<<") Please enter a value to be stored in memory (type 'q' to exit): \n";
        std::cin>>s;
        std::cout<<"\n";
        if(s[0] =='q')
        {
            break;
        }
        *Pointer1 = str2int(s);
        std::cout<<"Value:"<<*Pointer1<<" addr:0x"<<Pointer1<<"\n";
    }
    free(Pointer1);

return 0;
}
pid |P Hex|P Val|PHx to Dec|M Hex|M Val|MHx To Dec
7028|002afcfc|216032|2817276|00034BE0|10|216032
6312|0032fa70|4541408|3340912|00454BE0|20|4541408
1512|0043fb1c|3242304|4455196|00317940|30|3242304
8140|0036f9fc|1997096|3602940|001E7928|30|1997096