我正在关注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;
}
答案 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” - 如网页
中所示