__data_start
심볼의 주소를 프로그램에서 얻고 싶습니다. _GLOBAL_OFFSET_TABLE_의 경우 extern void* _GLOBAL_OFFSET_TABLE_
을 사용했습니다 (예제 here 참조). 그러나 __data_start
의 경우 동일한 기술이 작동하지 않습니다. 컴파일러가 프로그램을 잘 컴파일하지만 프로그램이 반환하는 값은 가짜입니다. 어떻게하면이 문제를 해결할 수 있는지 생각해보십시오.__data_start 심볼의 주소 얻기
답변
__data_start
과 같은 마법 기호는 값이 원하는 주소 인 포인터 변수가 아닙니다. 원하는 기호의 주소입니다. 따라서 &__data_start
처럼 &
연산자가 필요합니다.
'__data_start'는 어디에 정의되어 있습니까? 'etext'와 달리'ld -verbose'에 의해 주어진 링커 스크립트에는 없습니다. 그러나 그것은'ld'의 유물에 나타나는 것처럼 그것을 정의하는 링커입니다. 다른 링커 스크립트는'__data_start__'을 정의하지만'__data_start'는 정의하지 않습니다. –
사실 나는 전혀 모른다. 알아 내려면 링커 소스를 확인하거나 GNU ld의 전문가 인 사람에게 질문해야합니다. –
물론, 확실한 경우를 대비하여 :-) 내가 알면 다시 게시 할 것입니다. –
당신은 (!하지 포인터의 배열이이 선언)
extern char _GLOBAL_OFFSET_TABLE_[];
extern char __data_start[];
을 시도 할 수
및 코드에서 &__data_start
를 사용합니다.
이 경우 배열 이름이 첫 번째 요소에 대한 포인터로 계산되므로 '&'는 필요하지 않습니다. –
동의. 그러나 가독성을 위해 유용 할 수 있습니다. –
불완전한 타입 (알 수없는 크기)으로 선언 된 배열에서도'&'가 유효합니까? 일반적으로'T [N]'타입의 배열에 적용된'&'의 타입은'T (*) [N]'타입이지만, 여기에는'N'이 없습니다 ... –
이 코드는 전혀 문제없이 작동합니다.
extern void *data_start;
int main() {
fprintf(stdout,">%p\n", &data_start);
return 0;
}
atom :: » nm test | grep "data_start" ; ./test
0804a00c D __data_start
0804a00c W data_start
>0x804a00
그것이 제대로 작동하는지 잘 모르겠습니다. 내 대답을 보라. –
- 1. 주소 얻기
- 2. WAN 주소 얻기 Java
- 3. NIC 주소 얻기
- 4. 컴퓨터의 MAC 주소 얻기
- 5. 프로세스의 기본 주소 얻기
- 6. 특정 주소 값 얻기
- 7. 로컬 IP 주소 얻기
- 8. rvalue의 주소 얻기
- 9. ABPeoplePickerNavigationController - ABRecordRef에서 주소 얻기
- 10. 스레드 시작 주소 얻기
- 11. 사용자의 IP 주소 얻기
- 12. IP 주소 C#, asp.net 주소 얻기
- 13. 원격 호스트의 MAC 주소 얻기
- 14. 모델에서 사용자의 IP 주소 얻기
- 15. PHP PCRE - 도시 주소 얻기
- 16. 오버로드 메서드의 주소 위치 얻기
- 17. CFStreamCreatePairWithSocketToHost 로컬 끝점 주소 얻기
- 18. IP 주소 부분 문자열 얻기
- 19. 클로저에있는 심볼의 프린트 목록
- 20. lisp 심볼의 유효한 문자
- 21. 심볼의 데이터 크기
- 22. 두 IP 주소 사이의 IP 주소 목록 얻기
- 23. Ruby - 내부에서 클라이언트 IP 주소 얻기
- 24. C/C++에서 게이트웨이 주소 얻기
- 25. 콘솔 응용 프로그램에서 IP 주소 얻기
- 26. ASP.NET 웹 사이트 사용자 MAC 주소 얻기
- 27. POSIX C에서 자체 외부 IP 주소 얻기
- 28. 원격 소켓 종단점의 IP 주소 얻기
- 29. Google Map API - 사용자 주소 얻기
- 30. Django : settings.py 내의 원격 IP 주소 얻기
작동하지 않았습니다. 다른 질문에 대한 내 의견을 참조하십시오. '__data_start'를'& __ data_start'로 변경하십시오. –
@R .. 멋지다! 그것의 작품은 지금! 감사! 어쩌면 당신은 대답으로 이것을 넣을 수 있으므로 받아 들일 수 있습니다. – MetallicPriest