加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在变量赋值之前,内存不包含垃圾

发布时间:2020-12-16 09:53:42 所属栏目:百科 来源:网络整理
导读:我有一个简单的C程序: #include stdio.hint main(){ int i; for(i = 0; i 10; i++) printf("Hellon"); return 0;} 我用gcc编译它: gcc -g test.c 然后我运行调试器: gdb -q ./a.out 我在main设置了一个断点并运行: (gdb) break main(gdb) run 然后我让
我有一个简单的C程序:

#include <stdio.h>

int main()
{
    int i;
    for(i = 0; i < 10; i++)
        printf("Hellon");

    return 0;
}

我用gcc编译它:

gcc -g test.c

然后我运行调试器:

gdb -q ./a.out

我在main设置了一个断点并运行:

(gdb) break main
(gdb) run

然后我让它运行,直到它到达断点并尝试在地址rip当前指向显示汇编指令:

(gdb) x/i $rip
=> 0x400538 <main+8>:   mov    DWORD PTR [rbp-0x4],0x0

看起来下一条指令将用值0初始化我的局部变量i.由于它还没有执行指令,我希望有一个垃圾值.

(gdb) x/4xb $rbp-4
0x7fffffffe0ec: 0x00    0x00    0x00    0x00

它看起来不像垃圾值,看起来一切都已经零了.在执行main中的任何代码之前,断点应该暂停程序.

我在这里错过了什么?在初始化局部变量i之前,该内存位置是否应包含随机垃圾值?

解决方法

It doesn’t look like garbage values,it looks like everything has already been zero’d out.

我修改了你的例子,以表明它只是一个巧合.

#include <stdio.h>

int main()
{
  int i1;
  int i2;
  int i3;
  int i4;
  int i5;
  int i6;
  int i;

  for(i = 0; i < 10; i++)
    printf("Hellon");

  return 0;
}
(gdb) start
Temporary breakpoint 1 at 0x4005ac: file main.cpp,line 13.
Starting program: /home/a.out

Temporary breakpoint 1,main () at main.cpp:13
13        for(i = 0; i < 10; i++)
(gdb) info locals
i1 = 0
i3 = 0
i5 = 32767
i = 0
i2 = 4195520
i4 = -7856
i6 = 0

你看,不同的价值是可能的.

至于您的示例,此地址的值在到达main()之前至少更改两次.只需设置监视此地址,您将看到它在main()之前调用的函数中已更改:

(gdb) watch *(int*)0x7fffffffe06c
Hardware watchpoint 1: *(int*)0x7fffffffe06c

(gdb) r
Starting program: /home/a.out
Hardware watchpoint 1: *(int*)0x7fffffffe06c

Old value = 0
New value = 58
0x0000003a1d890880 in handle_intel () from /lib64/libc.so.6


Hardware watchpoint 1: *(int*)0x7fffffffe06c

Old value = 58
New value = 0
0x0000003a1d0146fd in _dl_runtime_resolve () from /lib64/ld-linux-x86-64.so.2

Hardware watchpoint 1: *(int*)0x7fffffffe06c

Old value = 0
New value = 1
0x00000000004005c3 in main () at main.cpp:7
7         for(i = 0; i < 10; i++)
#0  0x00000000004005c3 in main () at main.cpp:7

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读