传递`memset'的arg 2使得没有强制转换的指针产生整数

时间:2012-02-29 21:00:14

标签: c

我正在关注http://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/的教程,以了解有关漏洞利用的更多信息。显示的脚本是在perl中我想用C写它我在找不到类似于C中的“\ x41”* 10000的函数时遇到了问题。我环顾四周,发现memset是一个选项,但是当我使用它时,我保持得到此错误,无论我是“A”还是“\ x41”作为第二个参数。这是我的代码:

#include <string.h>
#include <stdio.h>

int main(void)
{
    FILE *crash;
    crash = fopen("crash.m3u", "w+");
    char junk[10001];
    memset(junk, "A", sizeof(junk));
    fputs(junk, crash);
    fclose(crash);
    return 0;
}

3 个答案:

答案 0 :(得分:6)

使用

memset(junk, 'A', sizeof(junk));

在C中,单引号'和双引号"之间存在巨大差异。单引号用于char值,双引号用于字符串(多个字符或const char *)值。

答案 1 :(得分:1)

"A"解析为字符串或char*,但memset的第二个参数是int。使用

memset(junk, 'A', sizeof(junk));
由于'A'的类型为char,因此

可以隐式投放到int

答案 2 :(得分:0)

而不是字符串,你需要一个角色。

尝试`\ x41'而不是“A” - 如网页

中所示