Windows 以内存地址为参数执行远程功能

Windows 以内存地址为参数执行远程功能,windows,memory,ollydbg,createremotethread,Windows,Memory,Ollydbg,Createremotethread,我试图在一个运行旧的Win32 Borland应用程序窗口中执行一个函数,该窗口具有类OLW_窗口。通过使用OllyDbg,我发现该函数有一个参数,即内存地址。函数使用的一个变量/值存储在该地址的偏移量处。我的想法是找到内存块中处于恒定偏移量的内存地址,将变量/值更改为我想要的值,然后执行函数。使用WriteProcessMemory和CreateRemoteThread执行是可以的,但问题是如何找到内存地址/块?在OllyDbg中打开内存映射时,内存块没有所有者、节或包含。是否可以获取由指定线

我试图在一个运行旧的Win32 Borland应用程序窗口中执行一个函数,该窗口具有类OLW_窗口。通过使用OllyDbg,我发现该函数有一个参数,即内存地址。函数使用的一个变量/值存储在该地址的偏移量处。我的想法是找到内存块中处于恒定偏移量的内存地址,将变量/值更改为我想要的值,然后执行函数。使用WriteProcessMemory和CreateRemoteThread执行是可以的,但问题是如何找到内存地址/块?在OllyDbg中打开内存映射时,内存块没有所有者、节或包含。是否可以获取由指定线程创建的内存块列表?或者我可以从应用程序中得到它吗?顺便说一句:该函数通常在单击按钮时执行,我要设置的变量/值是在listview或等效文件中按名称列出的数据库ID。

最好的方法是调用该函数

例如,这里有一个将输出打印到控制台的函数:

void ConsoleOutputchar*文本; 要调用它,我们将在目标二进制文件中找到此函数的地址。假设它是在0xDEADC0DE找到的

我们将为函数指针形成一个typedef:

typedef void(__cdecl* tConsoleOutput)(char* text);
我们将创建该函数指针类型的实例

tConsoleOutput ConsoleOutput = (ConsoleOutput)0xDEADC0DE;
要调用函数,我们只需执行以下操作:

ConsoleOutput("Hello");

同样,对于您的项目,您可以输入所需的任何参数。

如果内存地址是函数的一个参数,您不能提供任何您喜欢的地址吗?我可以,但我担心内存地址还包含函数使用的其他变量,如数据库连接句柄。但我找到了部分答案