使用gdb计算返回地址

时间:2016-01-27 03:02:04

标签: c

我目前正在做一个学校项目,我在ubuntu上使用gdb找不到缓冲区溢出漏洞。

我之前从未使用过gdb,但是在互联网上进行了一些研究,当我使用“disas main”命令时,我对我所看到的内容感到非常不知所措。

我想知道是否有人可以告诉我如何调试此程序或任何其他程序,并告诉我如何找到返回地址。

我这里有这个代码:

/* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int bof(char *str)
{
    char buffer[12];
    /* The following statement has a buffer overflow problem */
    strcpy(buffer, str);
    return 1;
}

    int main(int argc, char **argv)
{
    char str[512];
    FILE *badfile;
    badfile = fopen("badfile", "r");
    fread(str, sizeof(char), 5122, badfile);
    bof(str);
    printf("Returned Properly\n");
    return 1;
}

1 个答案:

答案 0 :(得分:1)

在调试器中,您可以看到反汇编的代码,只需在函数的ret操作数上添加一个断点即可。停止时,请查看指向堆栈地址的esp寄存器的值。然后探索此地址的内存,前4个(取决于您的平台)字节将为您提供将用于返回的地址。