パラメータを使用して、同じプロセスのコンテキストで別のプロセスで関数を呼び出したいです。このために、CreateRemoteThread()
関数は仕事をしているようです。コード例は、ここなどで見つけることができます。
注: 他の提供されたソリューションは実装したくありません。
関数にパラメーターを渡す場合、パラメーターはガベージとしてのみ受信されます。
私の関数はパラメータとしてint
a と 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", ¶ms, sizeof(my_parameters), nullptr);
メッセージ ボックスには明らかに間違った値が表示されますが、エクスポートされたDLL
関数は正しく実装されています。
コードに何か問題がありますか、またはアセンブリ レベルでこの問題をデバッグするための推奨される方法はありますか? レジスタに正しい値が含まれていません。