这是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')
这是我执行的操作顺序:
- 在一个 bash 选项卡中运行脚本。它启动
prog - 在另一个bash的标签:
sudo gdb -p `pgrep prog`。gdb将自身附加到正在运行的进程 - 在
dummy调用中设置断点gdb:b dummy - 按
c在gdb继续 - 点击Enter脚本继续
gdb放弃说:0x000056446a5af764 <dummy+4>: Cannot access memory at address 0x56446a5af764
如果不是以编程方式提供输入,而是手动启动程序,附加 gdb 并自己提供输入,则断点会正确命中。
脚本中有什么问题?

