是否可以在内存中修改功能
Is it possibly to modify a function in memory?
基本上,我有一个要修补的二进制文件,我不仅想在此功能上调用一个挂钩,而且我想跳入它并添加我的自己的代码行,也修改了其他一些值。
例如:说这个非常简单的功能是在二进制中,但是我无法访问它,如果它是某些类的成员函数,我只能查找某些签名或偏移。
void Test()
{
int a = 10;
int b = 15;
cout << a << endl;
}
我想将其更改为例如:
void Test()
{
int a = 20;
int b = 15;
cout << a + b << endl;
}
不必重新创建整个功能,因为在我的真实情况下。该功能确实很复杂,并且需要数十个其他功能,我也必须sig扫描,最重要的是,它不断更新。
考虑热点。我的库,如果使用Windows(https://www.codeproject.com/articles/1043089/hotpatching-deep-inside(可能会有所帮助。
在此处,您可以用您的跳跃代码替换有许多方法,但是通常您会用跳转代码替换启动字节(Xor rdi,rdi(,因为告诉链接器将这些字节保留为函数。<<<<<<<<<<<<<<<</p>
是的,确实可以修改内存中的功能,这称为'自我修饰代码'。也就是说,它非常复杂,并且对干净的代码库不利。
您想用一个功能指针来解决这个问题,这使您可以将各种功能传递到现有函数中:
void Test(int (*stringFunction)(int a, int b))
{
int a = 10;
int b = 15;
cout << stringFunction(a,b) << endl;
}
您可以像以下不同的行为一样调用您的功能:
int defaultFunction(int a, int b) {
return a;
}
int specialFunction(int a, int b) {
return a+b;
}
Test(defaultFunction);
Test(specialFunction);
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 独立读取-修改-写入顺序
- 如何在C++中获得"静态纯虚拟"功能?
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- C++ 为什么const X&可以通过功能进行修改?
- 是否可以在内存中修改功能
- 如何从功能(C UWP应用程序)中修改按钮内容
- 如何从另一个功能中修改的结构的炭指针成员中获取值
- 使用键盘功能修改C GLUT中的2D数组指针
- GCC 是否可以修改 C++ 功能的 C 标头
- 修改VTable表项没有重定向功能
- 是否有用于修改AutoHotkey_L中DLL调用功能的标准协议
- 用于本机C++的 zip 库,具有删除/修改功能
- 扩展功能(又名修改)visual studio C/ c++编译器