- C++相談室 part116 [転載禁止]©2ch.net
648 :627[sage]:2015/04/20(月) 01:57:48.89 ID:xXEARlC8 - あの後やっぱり気持ち悪くて色々調べてみた。
MAPファイル出力したところ、下記の様な情報が出力されてこれが原因だったんじゃないかと思う。 MAPファイル Address Publics by Value Rva+Base Lib:Object 0000:00000000 ___ImageBase 10000000 <linker-defined> 0001:000003e0 _A@16 100013e0 f A.obj 0001:000003e0 _B@16 100013e0 f B.obj 該当関数はソースがA.cppとB.cppで別れていたから当然別オブジェクトになるんだけど 両方のオブジェクトファイルのセクション:オフセットがまったく同じになっていた。 正直、処理系に全然詳しくないから見当違いな事を言ってしまうかもしれないが、 この状態でリンクしにいったのが原因で>>627の様なバグが発生してたんじゃないかと思ってる。 ちなみに>>629で書いているけど該当関数にデバッグ文を入れると今回の事象が発生しないし、 この場合、MAPファイルのセクション:オフセットは同一ではなくなっている事を確認している。 今回の件は珍しくて非常に興味深いし。 後学のためにもこの辺詳しい人いれば補足しておくれ。
| - C++相談室 part116 [転載禁止]©2ch.net
649 :627[sage]:2015/04/20(月) 02:05:53.62 ID:xXEARlC8 - >>648の補足
ABとは別に似たような関数作って実験してみたらやはり下記の様な感じになって事象が発生したわ 0001:00000730 _C@20 10001730 f C.obj 0001:00000730 _D@20 10001730 f D.obj 出力された機械語の参照もおかしくなっている。(セクションとオフセットが同じ値だから当然か) ※mov dword ptr [esp], ベースアドレス + オフセット(00001730h)
|
|