1

関数へのポインターがあり、それを別の(無関係/子)実行可能ファイルに渡す場合、セグメンテーション違反を起こさずにその関数を呼び出すにはどうすればよいですか?

現時点では、関数を作成して、このメモリアドレスを割り当てることができます。

Dim As Function (ByRef As String) As Integer MyFunction
' get pointer...
MyFunction = FunctionPointer

しかし、MyFunctionを呼び出すと、セグメンテーション違反が発生します(明らかに、呼び出している関数が、アクセスが許可されていない別の実行可能ファイルアドレススペースにあるため)

どうすればこれを修正/回避できますか?

4

2 に答える 2

8

他の実行可能ファイル(関数を呼び出したい実行可能ファイル)を制御できる場合は、それをPIE(位置に依存しない実行可能ファイル)としてビルドし、最初の実行可能ファイルのアドレス空間にロードします。

ではC、でビルドして-fPIC -pieから、とを使用dlopen(3)dlsym(3)ます。

BASIC、私には手がかりがありません;-(

于 2011-07-08T04:27:35.607 に答える
2

他の関数のアドレス空間に「アクセスできない」ということではなく、その空間がまったく別の無関係なアドレス空間であるということです。各プロセスには独自の仮想アドレス空間があるため、ポインターの数値は、何らかの方法で交換できたとしても、別の関数のアドレス空間内では意味がありません。

一般的なプロセス間通信では、通常、システムから共有メモリを明示的に要求しますが、FreeBasic がそのような機能を公開しているかどうかはわかりません。既存のリモート プロシージャ コール ライブラリを調べてみませんか?

于 2011-07-07T21:05:00.823 に答える