改变目标函数的外观,但不能完全改变
Change beheviour of target function but not completely
编辑:我知道OllyDBG是可能的,我让它工作了,但我仍然需要运行时版本(CPP),这样我就可以在那里执行跳转。
在交换机内的这个功能(伪代码)中,我想修改情况115中的操作,例如将CALL 100CE3E8更改为CALL 100CF1E9
它看起来像:
(案例115)
sub_100CE3E8(a1, v19);
break;
1024185D 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
10241860 50 PUSH EAX
10241861 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
10241864 51 PUSH ECX
10241865 8B0D A0B12A10 MOV ECX,DWORD PTR DS:[102AB1A0]
1024186B E8 78CBE8FF CALL somelib.100CE3E8
在这种情况下,我想替换指令的指定部分,例如1024186B
我使用MS Windows Detours 1.5来执行这种操作,它在大多数情况下都能很好地工作。
void hSwitchFunction(int a1)
{
//So what should I put here to jump directly to 1024185D,
//and don't replace the function completely?
//I mean I want to modify just the part of this function.
}
//somewhere in the code
DetourFunction((PBYTE)0x10241630, (PBYTE)hSwitchFunction);
//somewhere in the code
在您给出的代码中,开关的变量来自返回所需值的函数。正如你在代码中看到的。在这个值上,他们添加了一个指针,减少了移动到v14的值。然后在交换机中使用。还要注意,它们是从函数中调用它的。在某些情况下,这可能很重要。因此,您所要做的就是复制相同的更改并在交换机中使用它。
相关文章:
- 是否可以将函数导入命名空间,但不能导出它?
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- std::chrono::d uration 可以按秒初始化,但不能按毫秒初始化?
- Python/C++:可以导入犰狳(arma::)但不能导入子程序arma::arma_rng::randn
- 为什么我可以从C++文件中读取 int 值,但不能浮点?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- SqLite c++,可以创建数据库,但不能将 anthing 插入到表中
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- C++:返回本地对象,但不能正常工作
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- 我可以在Windows(Visual C++)中读取bin文件,但不能在linux(GCC)上读取bin文件
- QProcess可以启动程序,但不能启动python(命令行)
- C++11 向量包含 2 个不同的子类,但不能同时进行
- Eclipse 中的 Makefile 项目可以运行,但不能调试,为什么?
- 改变目标函数的外观,但不能完全改变