2

getmodulefilenamew関数は、2番目の引数をバッファとして受け入れるため(この場合は固定サイズ)、誤検知(バッファオーバーフロー)を生成します。

ただし、ドキュメントを確認してください:http: //msdn.microsoft.com/en-us/library/ms683197%28v=vs.85%29.aspx

引用:バッファが小さすぎてモジュール名を保持できない場合、文字列は終了ヌル文字を含むnSize文字に切り捨てられ、関数はnSizeを返し、関数は最後のエラーをERROR_INSUFFICIENT_BUFFERに設定します。

信頼できる第三者機関として、この問題を誤検知として確認または拒否できますか。ご協力いただきありがとうございます!

===

HMODULE applicationModule = GetModuleHandleW(NULL);
WCHAR processName[MAX_PATH];
memset(processName, 0, sizeof(processName));
GetModuleFileNameW(applicationModule, processName, sizeof(processName));

===

問題はGetModuleFileNameW関数の行です

スキャンはVeracode静的アナライザーによって提供されました。

4

1 に答える 1

2

問題は、に誤った値を渡していることですnSize。バイト数を渡しますが、文字数を渡す必要がありますMAX_PATH。ワイド文字のサイズは2バイトであるため、これらの値は異なります。

したがって、はい、コードにエラーがあります。モジュール名が十分に長い場合、Windowsは、260文字しか使用できないバッファに最大520文字を書き込もうとします。

于 2011-08-10T21:12:29.123 に答える