debug的d命令读内存全是0

img

img


使用debug时,用d命令读内存,结果一直是0,是我的内存有问题吗?

正常,内存没问题
你可以用debug命令将一个文件载入内存,再看看是否是文件的内容

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/258990
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:序列化破坏单例模式以及如何防御的应用与Debug分析
  • 除此之外, 这篇博客: 汇编实验之用debug命令查看寄存器和内存中的内容中的 用D命令直接查看内存中的内容 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    将直接列出debug预设地址处的内容。
    在这里插入图片描述

  • 您还可以看一下 金庭波老师的8086汇编语言讲座课程中的 汇编第02讲 debug的D命令小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    可能出现的原因是指针未初始化或指针指向的值为空。如果指向的值为空,那么输出的就是0。可以通过以下步骤来解决这个问题:

    1.检查指针是否初始化,如果没有初始化,需要初始化指针。

    2.检查指向的值是否为空,如果为空,需要给指针指向的值分配空间。

    3.在执行D命令时,使用带参数的方式,例如d [起始位置] [结束位置],对于起始位置和结束位置可以输入程序中已经定义的内存地址。

    4.通过在程序中添加输出语句或断点,检查程序运行的流程和输出的值是否正确。

    以下是一个示例代码,其中初始化了一个指针,并从指针指向的内存位置开始输出内存值:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int *ptr = (int*)malloc(sizeof(int));
        *ptr = 10;
        printf("ptr: %p\n", ptr);
        printf("*ptr: %d\n", *ptr);
    
        printf("Memory Values:\n");
        //输出内存值,从ptr指向的内存位置开始,显示5个内存地址的值
        asm("movl $4,%eax");
        asm("movl $0,%ebx");
        asm("movl $5,%ecx");
        asm("movl %0,%%esi" : : "m"(ptr));
        asm("int $0x80");
        return 0;
    }
    

    其中使用了汇编语言的int $0x80指令来进行D命令的操作,可以在调试器中运行该程序,并观察输出的结果。如果内存值都是0,则可以考虑以上提供的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^