如何在MessageBox上显示FARPROC内存地址

时间:2013-03-07 01:50:36

标签: c# c++ c dll

所以我试图用一个FARPROC的内存地址弹出一个MessageBox,这样我就能看到它的值。我似乎无法做到这一点。我也尝试过一些古怪的东西。

这是我上次尝试过的不切实际的例子。

MessageBox(NULL, (LPCSTR) (WCHAR) myFarproc, "Loader", NULL);

它只是崩溃程序,

MessageBox(NULL, (LPCSTR) myFarproc, "Loader", NULL);

显示胡言乱语。另外值得注意的是,调用此dll代码的程序在C#中。

2 个答案:

答案 0 :(得分:1)

你不能只是将一个指针转换成一个字符串并期望一些清晰的东西,特别是如果你将一个随机指针转换成一个指向C风格字符串的指针(这就是LPCSTR)。

您需要做的是使用sprintf_s之类的东西将指针的数值转换为字符串,并显示结果字符串。

例如(从内存中,没有编译它):

char buffer[9];   // Adjust size if you're on a 64-bit system
sprintf_s(buffer, "%x", (size_t)myFarProc);

这假设您可以使用sprintf_s的C ++版本。

答案 1 :(得分:0)

我想我做到了。我这样做了吗?

size_t pAddy = (size_t) myFarproc;
stringstream ss;
char buff[10];
ss << itoa(pAddy,buff,16);
MessageBox(NULL, (LPCSTR) ss.str().c_str(), "Address", NULL);