CreateProcessでブレークポイント
CreateProcessでブレークポイントを設定するには、新規ブレークポイントで以下のように入力する。
1 |
{,,kernel32.dll}_CreateProcessW@40 |
kernel32.dllはこの関数を実装しているDLL40、はこの関数の引数のバイト数だと思われる。
このやり方でうまくいかない場合
プログラムの最初の方で適当なブレークポイントを設定し、以下のコードの結果を調べる。
1 |
void* addr = (void*)CreateProcess; |
ShellExecuteExなどはCreateProcessを他のスレッドで呼ぶらしい。その場合はデバッグの場所でメインスレッドを指定する。
スタックトレースがうまく表示されないときはシンボルのロードをする。
追記:Visual Studio 2017以降で動かない場合
関数ブレークポイントの設定で以下のように入力する(アンダーバーと@以下を削除する)。
1 2 |
{,,kernel32.dll}CreateProcessW {,,user32.dll}CreateWindowExW |