如果使用pwntools发送输入,为什么gdb无法读取内存?

逆向工程 数据库
2021-06-15 18:00:45

这是gdb附加的程序

程序

#include <stdio.h>

void dummy(char* s)
{

}

int main()
{
    char buf[512];
    scanf("%s", buf);
    printf("%s\n", buf);
    dummy(buf);
    return 0;
}

它编译为:

gcc prog.c o prog

这是驱动程序的脚本:

from pwn import *

p = process("./prog")
raw_input('>>')
p.sendline('A')

这是我执行的操作顺序:

  1. 在一个 bash 选项卡中运行脚本。它启动prog
  2. 在另一个bash的标签:sudo gdb -p `pgrep prog` gdb将自身附加到正在运行的进程
  3. dummy调用中设置断点gdbb dummy
  4. cgdb继续
  5. 点击Enter脚本继续
  6. gdb 放弃说: 0x000056446a5af764 <dummy+4>: Cannot access memory at address 0x56446a5af764

在此处输入图片说明

如果不是以编程方式提供输入,而是手动启动程序,附加 gdb 并自己提供输入,则断点会正确命中。

在此处输入图片说明

脚本中有什么问题?

1个回答

gdb当您的 python 脚本完成时,该进程在连接到它之前/同时终止。在脚本末尾使用以下行以保持其运行。

p.interactive()