0

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

4

1 に答える 1

1

「key_address」が何であるかはわかりませんが、 sizeof(key_address) と sizeof(footer) はどちらも sizeof(char*) と同義であり、おそらくあなたが望むものではないことに注意してください。おそらく代わりに strlen(key_address) と strlen(footer) が必要です。割り当てられたサイズを実際に知る必要がある場合は、それをどこかに保存して、この関数に渡す必要があります。

于 2012-09-30T20:37:32.380 に答える