最初は、私は C++ とデバッグの初心者です。DEBUG_ONLY_THIS_PROCESS パラメータを指定して CreateProcess API を使用し、CREATE_PROCESS_DEBUG_EVENT を待ちます。受信したら、ポイントのアドレスを取得するために Eip レジスタをチェックします。そして、この点がメイン関数のアドレスだと思いました。
このアイデアを検証するために、ollydbg を使用して exe の開始アドレスを確認しました。しかし、それは私のものと同じではありませんでした。デバッグ API で見つけたのは 0x77a364d8 ですが、olly は 0x00401000 だと言っています。その後、停止せずに、olly でアドレス 0x77a364d8 を確認しました。アドレスを見つけて、そこにブレークポイントを設定しました。
次に、olly をリロードすると、olly が最初に 0x77a364d8 アドレスに移動してプロセスをロードし、次に 0x00401000 アドレスに移動してそこで待機することがわかりました。0x77a364d8 アドレスは、いくつかの ntdll 関数をポイントして、プロセスをメモリにロードします。
それが本当なら、コードで 0x00401000 アドレスを取得するにはどうすればよいですか (c++、私は初心者で、t を越えてください :) )、それは Main 関数のアドレスですか?