我试图在我的 malloc 包装函数中分配一个大小为 sz 的结构,然后在该内存区域之后自动添加一个页脚以跟踪超出边界的潜在写入。
在 malloc 包装函数中:
malloc_result = (char *) malloc(sz+sizeof(FOOTERSTR));
...
struct metadata_record * metarec = get_metadata_record_new(sz);
...
create_footer(metarec,footer,key_address);
void create_footer(struct metadata_record *rec, char *footer, char *key_address) {
//Add Footer
printf("footer = %s\n",footer);
printf("key_address = %p\n",key_address);
char *new_footer_ptr = key_address+sizeof(key_address);
printf("new_footer_ptr = %p\n",new_footer_ptr);
strncpy(new_footer_ptr,footer,sizeof(footer));
new_footer_ptr[sizeof(footer)-1] = '\0';
printf("new_footer_ptr = %s\n",new_footer_ptr);
}
当我运行它时,我得到:
footer = zftsfviz
key_address = 0x964ef10
new_footer_ptr = 0x964ef14
new_footer_ptr = zft
我希望在将 new_footer_ptr 作为字符串打印时获得完整的页脚文本,但我只得到页脚的第一部分。