2012-07-05 25 views
1

這是在Windows 7 64位上使用VC++ 2010的C語言。函數地址是否一致?

有沒有辦法可靠和一致地訪問函數的地址(c鏈接),以便它在每次運行程序時都是相同的地址?

+3

...爲了什麼目的?而且......你是否擁有這個功能和來電者? – reuben 2012-07-05 12:03:32

+4

@reuben:將地址存儲在數據庫中? :-D – Vlad 2012-07-05 12:03:59

+0

只是每次問。 – 2012-07-05 12:08:24

回答

4

如果你在運行時得到了地址,它應該保持穩定的運行。它可能下次不同。

操作系統中有些功能可能會導致您的可執行代碼被加載到不可預知的地址(部分是因爲安全性,部分原因是兩個DLL可能需要相同的基址)。

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); 
}