从DLL中调用函数注入进程并更改指针函数的地址

时间:2013-12-22 18:38:55

标签: c++ c dll

您好我遇到了这个问题;我想用我注入的DLL调用进程中的函数,但是我希望能够更改函数的地址,因为地址与每个程序版本不同。

基本上我得到了DllMain,因此制作了一个新的Thread,其功能与此主要示例相同。

typedef void (*func_t)();
func_t func = (func_t)0x2000; //as an example

int main(int argc, char* argv[]) {
    int type = 1;

    if(type == 0) {
        *func = 0x2001; //altough *(int*)func = 0x2001; works but it doesn't change it
    }
    func(); //func will do the same in each version of the program except the addresses change so you can e.g change the type with cin >> type; and that'll it work
}

我得到了这个:错误:分配只读位置'* func

谢谢

1 个答案:

答案 0 :(得分:1)

*func = 0x2001;

你可能想要做相反的事情。将func而不是*func更改为该函数的地址。例如,这将起作用:

func = (func_t)0x2001;