在GDB中查找源代码中的空白数据值

时间:2017-09-07 21:53:19

标签: c gdb

这是家庭作业,所以我只是想要一个轻推前进。

我有一个已编译的C程序和源代码,其中包含一些空白。我的任务是找到"秘密"使用GDB作为GDB简介的值。我已经在这里工作了几个小时并继续进行。

这是我给出的源代码:

#include<stdio.h>

int gfoo = ;//secret 1
int main()
{
  static int sfoo;
  int lfoo;
  int *dfoo = (int *) malloc (sizeof(int));
  sfoo = ;//secret 2
  lfoo = ;//secret 3
  *dfoo = ;//secret 4
  return sfoo + lfoo + gfoo + *dfoo;
}

到目前为止,我已经在GDB中打开了可执行文件。然后我用

打开程序集
(gdb) layout asm

然后我在main处设置休息并运行它。然后我可以打印&#34; gfoo&#34;的值。因为它是全局的(p gfoo),但是不能步入程序中的任何一个其他任何&#34;秘密&#34;值是可访问的。帮助

1 个答案:

答案 0 :(得分:0)

编写您自己的给定代码版本,但为变量添加已知值。然后运行gdb,键入layout asm并查找movl和您指定的值。注意模式。然后加载具有未知值的可执行文件并查看asm布局。模式将是相同的。记下价值观。

#include <stdlib.h>

int gfoo = 1;//secret 1
int main()
{
  static int sfoo;
  int lfoo;
  int *dfoo = (int *) malloc (sizeof(int));
  sfoo = 2;//secret 2
  lfoo = 3;//secret 3
  *dfoo = 4;//secret 4
  return sfoo + lfoo + gfoo + *dfoo;
}


   ¦0x4004d8 <main+1>       mov    %rsp,%rbp                                                                                                                                                                                     ¦
   ¦0x4004db <main+4>       sub    $0x10,%rsp                                                                                                                                                                                    ¦
   ¦0x4004df <main+8>       mov    $0x4,%edi                                                                                                                                                                                     ¦
   ¦0x4004e4 <main+13>      callq  0x4003f0 <malloc@plt>                                                                                                                                                                         ¦
   ¦0x4004e9 <main+18>      mov    %rax,-0x8(%rbp)                                                                                                                                                                               ¦
   ¦0x4004ed <main+22>      movl   $0x2,0x200b35(%rip)        # 0x60102c <sfoo.2366>                                                                                                                                             ¦
   ¦0x4004f7 <main+32>      movl   $0x3,-0xc(%rbp)                                                                                                                                                                               ¦
   ¦0x4004fe <main+39>      mov    -0x8(%rbp),%rax                                                                                                                                                                               ¦
   ¦0x400502 <main+43>      movl   $0x4,(%rax)                                                                                                                                                                                   ¦
   ¦0x400508 <main+49>      mov    0x200b1e(%rip),%edx        # 0x60102c <sfoo.2366>                                                                                                                                             ¦
   ¦0x40050e <main+55>      mov    -0xc(%rbp),%eax                                                                                                                                                                               ¦
   ¦0x400511 <main+58>      add    %eax,%edx                                                                                                                                                                                     ¦
   ¦0x400513 <main+60>      mov    0x200b0b(%rip),%eax        # 0x601024 <gfoo>                                                                                                                                                  ¦
   ¦0x400519 <main+66>      add    %eax,%edx                                                                                                                                                                                     ¦
   ¦0x40051b <main+68>      mov    -0x8(%rbp),%rax                                                                                                                                                                               ¦
   ¦0x40051f <main+72>      mov    (%rax),%eax                  

请注意movl说明。

当您运行代码时,您会看到以下内容:

[Inferior 1 (process 49611) exited with code 012]

012是八进制或十进制10。您可以使用该值来验证您的答案。