我想在带有参数的同一进程的上下文中调用另一个进程中的函数。为此,该CreateRemoteThread()
功能似乎可以完成这项工作。可以在此处找到代码示例,例如。
注意:我不想实施其他提供的解决方案,因为这个解决方案看起来不错且切中要害。
在将参数传递给函数时,参数仅作为垃圾接收。
我的函数将 aint
和 adouble
作为参数:
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
函数已正确实现:
代码有什么问题,还是有推荐的方法在程序集级别上调试此问题?寄存器不包含正确的值。