2012-07-05 5 views
1

이것은 Windows 7 64 비트에서 VC++ 2010과 함께 C 언어를 사용하고 있습니다.함수 주소가 일관됩니까?

프로그램의 모든 실행에서 동일한 주소가되도록 함수의 주소 (c 링크)에 안정적이고 일관되게 액세스 할 수있는 방법이 있습니까?

+3

... 그리고 어떤 목적으로? 그리고 ... 당신은 기능과 발신자를 둘 다 소유하고 있습니까? – reuben

+4

@reuben : 주소를 데이터베이스에 저장 하시겠습니까? :-D – Vlad

+0

그냥 물어보십시오. –

답변

4

런타임에 주소를 얻은 경우 주소가 안정적으로 유지되어야합니다. 다음 번에 이 달라질 수 있습니다.

실행 코드가 예측할 수없는 주소로로드 될 수있는 기능이 OS에 있습니다 (부분적으로 두 개의 DLL에 동일한 기본 주소가 필요할 수 있기 때문에 부분적으로 보안을 위해).

1

아니요, 대부분의 최신 OS에 대해 매번 동일한 주소에 기능이로드된다는 보장이 없기 때문입니다. 일부 임베디드 장치에서는 링커 파일에서 함수의 고정 주소를 정의하면이 문제를 해결할 수 있습니다.

하지만 왜 귀찮았습니까? 변수의 주소와 같은 함수의 주소를 취할 수 있습니다.

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