1

这是在 Windows 7 64 位上使用 C 语言和 VC++ 2010。

有没有办法可靠且一致地访问函数的地址(c 链接),以便在每次运行程序时它都是相同的地址?

4

2 回答 2

4

如果您在运行时获得了地址,那么它应该在该运行中保持稳定。下次可能会有所不同。

操作系统中的某些功能可能会导致您的可执行代码被加载到不可预测的地址(部分是为了安全,部分是因为两个 DLL 可能需要相同的基地址)。

于 2012-07-05T12:09:44.373 回答
1

不,因为对于大多数现代操作系统,不能保证每次都将函数加载到相同的地址。在某些嵌入式设备上,如果您的链接器文件为该函数定义了一个固定地址,您也许可以避免这种情况。

但是为什么要打扰呢?您可以像获取变量一样获取函数的地址:

void func(int a)
{
    a=5;
}

void main()
{
    // In case you don't know or don't care about the signature of the function.
    void* p = func;

    // In case you do care and might want to call the function
    // at some point through the pointer.
    void (*f)(int) = func;

    printf("%p %p",p, f);
}
于 2013-06-12T18:14:02.317 回答