基本上,我有一个要修补的二进制文件,我不仅仅是想调用此函数上的 Hook ,而是想直接跳到其中并添加我自己的代码行,修改其他一些代码值也是如此。
例如:假设这个非常简单的函数位于二进制文件中,但我无法访问它,我只能查找一些签名,或者如果它是某个类的成员函数等的偏移量。
void Test()
{
int a = 10;
int b = 15;
cout << a << endl;
}
我想把它改成这样:
void Test()
{
int a = 20;
int b = 15;
cout << a + b << endl;
}
无需重新创建整个函数,因为在我的实际情况中..该函数非常复杂,需要数十个其他函数,我也必须对其进行签名扫描,最重要的是,它会不断更新。
最佳答案
考虑热补丁。我的库,如果使用 Windows ( https://www.codeproject.com/Articles/1043089/HotPatching-Deep-Inside ) 可以提供帮助。
有很多方法无法在这里深入讨论,但通常在告诉链接器为函数保留这些字节之后,您可以用跳转代码替换作为虚拟字节(xor rdi,rdi)的起始字节。
关于c++ - 是否可以修改内存中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56201115/