第11章 memstomp

memstomp は、このような重複がさまざまな標準で許可されていない場合に、重複するメモリー領域で関数呼び出しを特定するために使用できます。表11.1「memstomp によって検査された関数呼び出し」 にリスト表示されているライブラリー関数への呼び出しをインターセプトし、それぞれのメモリーの重複に対して詳細なバックトレースが表示され、問題のデバッグに役立つ詳細なバックトレースが表示されます。

Valgrind と同様に、memstomp ユーティリティーはアプリケーションを再コンパイルせずに検査します。ただし、このツールよりも高速であるため、便利な代替手段となります。

Red Hat Developer Toolset には、memstomp 0.1.5 が同梱されています。

表11.1 memstomp によって検査された関数呼び出し

機能説明

memcpy

n バイトをメモリー領域から別のメモリー領域にコピーし、2 番目のメモリー領域にポインターを返します。

memccpy

最大 n バイトを 1 つのメモリー領域から別のメモリー領域にコピーし、特定の文字が見つかったときに停止します。最後に書き込まれたバイトの後にポインターを返すか、指定の文字が見つからない場合は NULL を返します。

mempcpy

n バイトを 1 つのメモリー領域から別のメモリー領域にコピーし、最後に書き込まれたバイトの後にポインターをバイトに戻します。

strcpy

あるメモリー領域から別のメモリー領域に文字列をコピーし、2 番目の文字列にポインターを返します。

stpcpy

あるメモリー領域から別のメモリー領域に文字列をコピーし、2 番目の文字列の null 終端文字にポインターを返します。

strncpy

最大 n 文字を 1 つの文字列から別の文字列にコピーし、2 番目の文字列にポインターを返します。

stpncpy

最大 n 文字を 1 つの文字列から別の文字列にコピーします。2 番目の文字列の終端 null バイトへのポインターを返します。または、文字列が null 終端ではない場合、最後に書き込まれたバイトの後にバイトへのポインターを返します。

strcat

1 つの文字列を別の文字列に追加し、2 番目の文字列の終了点を上書きし、その最後に新しい文字列を追加します。新しい文字列へのポインターを返します。

strncat

1 つの文字列から別の文字列に最大 n 文字を追加し、2 番目の文字列の終了点を上書きして、その最後に新しい文字列を追加します。新しい文字列へのポインターを返します。

wmemcpy

n ワイド文字を、あるアレイから別のアレイにコピーし、2 番目のアレイにポインターを返す memcpy() 関数に相当するワイド文字。

wmempcpy

n ワイド文字を、あるアレイから別のアレイにコピーし、書き込まれたワイド文字にのアレイに続くバイトにポインターを返す mempcpy() 関数に相当するワイド文字。

wcscpy

ワイド文字の文字列を、あるアレイから別のアレイにコピーし、2 番目のアレイにポインターを返す strcpy() 関数に相当するワイド文字。

wcsncpy

最大 n ワイド文字を、あるアレイから別のアレイにコピーし、2 番目の文字列にポインターを返す strncpy() 関数に相当するワイド文字。

wcscat

1 つのワイド文字の文字列を別の文字列に追加し、2 番目の文字列の null 終端文字を上書きして、その最後に新しい文字列を追加する、strcat() 関数のワイド文字。新しい文字列へのポインターを返します。

wcsncat

最大 n のワイド文字を、あるアレイから別のアレイに追加し、2 つ目のワイド文字の文字列の null 終端文字を上書きして、新しいものを最後に追加する strncat() 関数のワイド文字。新しい文字列へのポインターを返します。

11.1. memstomp のインストール

Red Hat Developer Toolset では、devtoolset-12-memstomp パッケージにより memstomp ユーティリティーが提供され、「Red Hat Developer Toolset のインストール」 で説明されているように devtoolset-12-toolchain で自動的にインストールされます。