netcat中Hmallo()函数

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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值