『Windowsコアプログラミング』のメモ
2076 ワード
文字列バッファオーバーフローの問題を回避するには、 メモリ割り当てマクロ 一般的に、1つのバッファ処理関数のパラメータにターゲットバッファの長さが含まれていない場合、このような関数の使用を回避するとともに、このような関数の実装を回避する必要があります.C実行ライブラリは、 コンパイラフラグ .は、 ANSIとUnicodeバージョンの関数をエクスポートするには、通常、Unicodeバージョンの関数を1つ定義するだけで、ANSIバージョンの関数で文字列変換を実行してからUnicodeバージョンの関数を呼び出し、戻り値も同様に処理すればよいので、Windows内部でもこのような方式が採用されているため、Unicodeバージョンのプログラム効率はANSIバージョンに比べて高い. API IsTextUnicodeは、文字がUnicode符号化であるか否かを判断するために使用することができるが、この方法は100%信頼できるものではない. プロセス . 関数
MFC
strcpy/wcscpy、strcat/wcscat
などの安全でない文字列およびメモリ操作関数の使用を回避する必要があります._countof()
文字の出中文字数を取得し、使用を避ける(strlen/wcslen
).#define chmalloc(nCharacters) (TCHAR)malloc(ncharacters*sizeof(TCHAR)
を定義する.memcpy_s memmove_s wmemcpy_s wmemmove_s
などの記号定義の中で、マクロ__STDC_WANT_SECURE_LIB__
を定義することによって、バッファ処理に一連の代替関数を提供します.使用します./GS
および/RTCs
を使用することにより、バッファオーバーフローを自動的に検出することができる.MultiByteToWideChar
とWideCharToMultiByte
によってUnicodeとANSIの間の変換を完了し、入力ターゲット文字列の長さが0であると、変換に必要なターゲットバッファ文字数を返すことができます.MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx. GetCommandLine
は、プロセスの完全なコマンドラインパラメータを取得するために使用されるが、コマンドラインバッファを変更しようとすることは推奨されない.GetEnvironmentString()
関数は、プロセスアドレス空間内に割り当てられたメモリであるプロセスの環境ブロックを取得し、その文字列は以下と類似する: =::=::\ ...
VarName1=VarValue1\0
VarName2=VarValue2\0
VarName3=VarValue3\0
VarNameX=VarValueX\0
GetEnvironmentVariable(PCTSTR pszName,PTSTR pszValue,DWORD cchValue)
関数は、指定された環境変数の値を取得し、同様に、パラメータcchValue
が0
に入力されると、必要な文字数を返します.DWORD WINAPI GetEnvironmentVariable(
_In_opt_ LPCTSTR lpName,
_Out_opt_ LPTSTR lpBuffer,
_In_ DWORD nSize
);
ExpandEnvironmentStrings
は、環境変数文字列を展開するために使用され、その宣言:DWORD WINAPI ExpandEnvironmentStrings(
_In_ LPCTSTR lpSrc,
_Out_opt_ LPTSTR lpDst,
_In_ DWORD nSize
);
MFC