是否可以使用DLL Injection调用程序内的已知函数(我们知道函数类型,名称和参数)?
例如,我的程序中有以下功能:
void func(string text)
{
cout << text << endl;
}
如何从DLL调用它?
答案 0 :(得分:0)
可以调用一个任意函数,只给出原型及其在内存中的地址,但是你必须能够在另一个进程地址空间调用它(这可以通过链接到共享库或附加调试器来完成)< / p>
typedef int func(void);
func* f = (func*)0xabcd123;
int i = f(); // execute
但是我也试过将代码复制到内存的可执行部分并运行它,如下所示:
char code[] = {0x55,0x48,0x89,0xe5,0x89,0x7d,0xfc,0x48,0x89,0x75,
0xf0,0xb8,0x2a,0x00,0x00,0x00,0xc9,
0xc3,0x00}; // it is just compiled: return 42
// (with prologue, etc)
void *buf;
/* copy code to executable buffer */
buf = mmap (0,sizeof(code),PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON,-1,0);
memcpy (buf, code, sizeof(code));
/* run code */
int i = ((int (*) (void))buf)();
printf("the code returned: %d\n", i);
所以,如果您知道要执行的代码的大小,那么它就是可能的。