-3

パラメータを使用して、同じプロセスのコンテキストで別のプロセスで関数を呼び出したいです。このために、CreateRemoteThread()関数は仕事をしているようです。コード例は、ここなどで見つけることができます。

注: 他の提供されたソリューションは実装したくありません。

関数にパラメーターを渡す場合、パラメーターはガベージとしてのみ受信されます。

私の関数はパラメータとしてinta と aを取りdoubleます:

DLL_EXPORT void show_message_dialog(const int first_value, const double second_value)
{
    const auto text = std::to_string(first_value);
    const auto caption = std::to_string(second_value);
    MessageBoxA(nullptr, text.c_str(), caption.c_str(), MB_ICONINFORMATION);
}

私が理解している限りでは、パラメータを保持し、次のようなstructアドレスを渡すように定義する必要があります。struct

struct my_parameters
{
    int i;
    double d;
};

auto params = my_parameters{3, 1.1};
const auto process_id = get_process_id_from_process_name("...");
auto * const process_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process_id);
RemoteLibraryFunction(process_handle, "my_injected_dll.dll", "show_message_dialog", &params, sizeof(my_parameters), nullptr);

メッセージ ボックスには明らかに間違った値が表示されますが、エクスポートされたDLL関数は正しく実装されています。

コードに何か問題がありますか、またはアセンブリ レベルでこの問題をデバッグするための推奨される方法はありますか? レジスタに正しい値が含まれていません。

4

2 に答える 2