【发布时间】:2012-02-01 01:50:04
【问题描述】:
我正在制作一个 Hooking 程序,用于将方法插入到指定的内存部分。
我需要获取本地 C++ 函数的长度,我使用强制类型转换来获取函数的位置,但是如何获取长度?
会
int GetFuncLen()
{
int i = 0;
while((DWORD*)Function+i<max)
{
if((DWORD*)Function+i==0xC3)
{
return i;
}
i++;
}
}
工作?
【问题讨论】:
-
没有便携的方法可以做到这一点。 (不,你的版本并不总是有效。)我猜你是在 Windows 上的
DWORD东西。也许存在 Windows 特定的东西,但请在这种情况下指定你的编译器。 -
您是否正在尝试获取函数的大小,以便将其复制并注入远程进程?如果是这样,那就行不通了。
-
这比听起来要难得多。有一次我尝试了一种叫做 LDE64(或类似的东西)的东西,它应该通过遵循代码的路径、跟随分支等来计算函数的长度,以确定函数返回的最远点,但它有很多问题,几乎从来没有奏效,尤其是在优化的情况下。
-
你能描述一下为什么任何函数都不适合在它已经在的位置吗?这是一个不寻常的问题。
标签: c++