2011-06-19 4 views
-2

私はソースコードを持たないobjファイル内の関数を使用する必要があります。この関数はうまく動作していますが、スタックを破壊します(ランタイムespは正しく保存されていませんでした)。そして、問題を見つけてパッチを当てるのに十分なアセンブリを知りません。私は別のスレッドで関数を実行しようとしましたが、私のメインプログラムと同じメモリを共有しているので、クラッシュします。この関数は動作し、必要な処理をすべて行います。スタックが破損してアプリケーションがクラッシュすることが予想されます。主なアプリケーションからそれを分離する方法はありますか? IveはCreateProcessについて読んでいますが、私が理解したことから、実行したくない別の.EXEファイルを実行します。私はそれが外部プログラムであるかのように関数を実行したいので、スタックを破壊してもメインプログラムをクラッシュさせることはありません。とにかくC/C++でこのようなことをするのですか?または、誰かが物事を修正する別のアイデアを持っているのでしょうか?また、個人的にこのプログラムを書いて以来、私はその "汚い"かどうか標準に準拠していないかどうかは気にしません。関数は呼び出しスタックを破壊しても、実際にそれを保持しようとするImを行う必要があるからです。 スタッククリーンアップと別プロセスについて

はあなたに非常に多くの呼び出し規約のミスマッチのようなにおい

+1

"この機能はうまく機能し、その仕事をしますが、スタックを破壊します" - うまく機能しますか?明らかにそうではありません! –

+0

それは、私が何をしたいのですか、私は何を意味するのか知っていれば、それを保つ方法を探しています –

+1

あなたはそれを正しく呼んでいないかもしれないと考えましたか? –

答えて

2

大変ありがとうございました。関数がどのように呼び出されるかはどこに文書化されていますか?関数のプロトタイプを含むヘッダーファイルがありますか?別の呼び出し規約で呼び出してみてください。cdeclと呼んでいる場合は、stdcallと呼びます。逆の場合も同様です。

What can go wrong when you mismatch the calling convention?も参照してください。

関連する問題