繁体   English   中英

传递'memset'的arg 2可以从指针进行整数转换而无需强制转换

[英]Passing arg 2 of `memset' makes integer from pointer without a cast

我正在关注http://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/上的教程,以了解有关漏洞利用的更多信息。 显示的脚本在perl中,我想用C编写它。我在C中找不到类似于“ \\ x41” * 10000的函数时遇到困难。无论我是“ 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;
}

采用

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

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

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

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

由于'A'char类型的,因此可以工作,可以将其隐式转换为int

您需要一个字符来代替字符串。

尝试使用“ \\ x41”代替“ A”-如网页所示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM