内存分配和设置

时间:2019-02-01 21:29:50

标签: c linux x86

我通过一门课程的工作,而且我被责成通过看和调整一些C代码。我一生中从未写过C,但是我能够掌握一些功能并完成练习:)

在练习期间,我正在缓冲区中分配内存空间,并用任意字符填充该空间。这是一个缓冲区溢出任务的一部分。

我学会了两个功能:

malloc(size_t) - allocates memory with a size_t
memset(ptr, bytes, space) - sets shellcode into the memory

我将使用这个代码块作为一个示例:

char *nop = malloc(10);
memset(nop, 0x00, 10);
memset(nop, 0x90, 10);

我的问题是关于上面的代码,我在其中保留内存空间并用nops填充它。为什么有必要,如果有的话,那我填的是空间空与我期望的字符覆盖前第一字节。

将以下工作是相同的,或是否需要来填充空字节第一:

char *nop = malloc(10);
memset(nop, 0x90, 10);

2 个答案:

答案 0 :(得分:4)

第二次调用memset将完全覆盖第一个memset的操作,因此第一个是多余的。

如果先将所有字节设置为0,然后将它们的子集设置为0x90,则可能有意义。但是您要写入所有相同的字节,因此不需要第一个字节。

答案 1 :(得分:1)

您不必首先调用第一个memset(以0x00为值)。实际上,如果看到下一行将用不同的字节填充完全相同的内存块,我希望一个不错的编译器可以完全优化第一个调用。

相关问题