Hmalloc()函数是netcat源代码中的自定义函数,用于在内存中动态分配内存,并且将分配的内存进行填零的初始化处理。
1 函数格式
Hmalloc()函数的格式为
char * Hmalloc(unsigned int size)
其中,参数size表示要分配的内存大小,返回值为分配的内存首地址。
2 函数实现
2.1 内存分配
Hmalloc()分配的内存大小必须能够被4整除,所以当其参数size能够被4整除时,则分分配size大小的内存,如果size不能被4整除,则要对size进行微调,保证分配的内存能够被4整除,这也是Hmalloc()函数与malloc()函数的主要区别。
在Hmalloc()中,有如下代码
unsigned int s = (size + 4) & 0xfffffffc;
以上代码的作用就是,size能够被4整除,则s的值就是size;否则,对size进行微调(size的值变大),使得s能够被4整除。例如,size的值是16时,s的值就是16;如果size的值是17时,对size值进行微调,则s的值是20。
之后,调用malloc()函数动态分配内存。
char * p = (char*)malloc(s);
2.2 内存填零
在分配了内存之后,指针p中保存了内存的起始地址,接下来调用memset()函数对内存进行填零处理。
if (p != NULL)
memset(p, 0, s);
else
bail("Hmalloc %d failed", (char*)s);
如果分配内存失败,则调用自定义函数bail()显示内存分配错误的信息。
最后将p作为函数返回值返回。
3 函数代码
Hmalloc()函数的完整代码如下所示
unsigned int s = (size + 4) & 0xfffffffc;
char * p = (char*)malloc(s);
if (p != NULL)
memset(p, 0, s);
else
bail("Hmalloc %d failed", (char*)s);
return (p);
8395

被折叠的 条评论
为什么被折叠?



