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 を文字列として出力するときに完全なフッター テキストを取得したいと考えていますが、代わりにフッターの最初の部分のみを取得します。