掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
コンパイル後に作られるmapファイルに書かれている<linker-defined>とは何ですか? (ID:52571)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
一般的に Win32 EXE は 0x00400000 Win32 DLL は 0x10000000 を preferred load address としますが、実際にロードされるアドレスは 違う可能性があります (特に DLL) ただ Win32EXE はほとんどの場合 0x00400000 にロードされるようです。 # そこ以外にロードされたの見たこと無い... ロードアドレスを知る簡単な方法は、実行されたとおりブレークするか 関数へのポインタを表示するとか、GetModuleInformation() です。 MODULEINFO minfo; GetModuleInformation(GetCurrentProcess(),GetModuleHandle(0), &minfo,sizeof minfo); ただしロードアドレスからマップアドレスとの対応を取るのは面倒です。 戻りアドレスが壊れるのは釈迦に説法くさいですが スタックオーバーフロー、バッファオーバーフローが主因で、 その他には可変引数の処理間違いとか、無効ポインタが指す先への 書き込みとか、__stdcall の使い間違いとか、まあいろいろありますわな。 マルチスレッドしているのなら、ロックが必要なところに正しいロックが なされていないとかで、非常にわかりにくいシビアなタイミングで 無効なデータをアクセスしたとかがありえます。 組み込み系で経験されたというスタック破壊は単なるスタックオーバーで しょう。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.