2012-03-07 5 views
1

실행 파일의 다른 변수를 해당 메모리 세그먼트에 매핑하는 도구가 Linux에 있습니까?실행 파일의 변수를 메모리 세그먼트에 매핑

예를 들어, 내 실행 파일에 초기화 된 전역 변수 int x = 10이있는 경우이 도구는 해당 변수가 .data 세그먼트에 속하고 아래에 표시된 것과 비슷한 형식으로 표시되어야합니다. 실행 파일이 제거 하지 경우

x .data

+0

왜 그런 질문을합니까? 왜 당신에게 중요합니까? 당신은'nm'와'objdump'를 사용할 수 있습니다 (출력을 결합하기 위해 awk을 쓰십시오). –

+0

@BasileStarynkevitch :'objdump'에 위에서 언급 한 출력 결과를 보여주는 옵션이 있습니까? –

+0

형식은 다르지만 'objdump -t -h'가 유용 할 수 있습니다 (아마도'nm'의 출력과 결합 될 것입니다). 그러나 당신은 왜 당신이 그것을 원하는지 설명해야합니다. 전역을'.bss' 또는'.data'에 넣는 것은 IMHO는 건물 체인의 구현 세부 사항입니다. –

답변

1

, 다음 nm command은 당신이 원하는 것을 할 것입니다 (또한 Linux manpage for nm 참조) -이 기호 이름/주소/유형의 테이블을 인쇄합니다. 여러 출력 옵션이 있습니다. Linux에서 "sysv"스타일 형식화는 원하는대로 제공합니다. 당신은 C의 소스 코드에서 개체 파일을 생성 할 경우

$ nm -f sysv /bin/perl

Symbols from /bin/perl:

Name Value Class Type Size Line Section

Bases.3 |000000000813019c| d | OBJECT|0000000000000014| |.data F0convert |00000000080c6905| t | FUNC|00000000000000c6| |.text PL_AMG_names |0000000008137c80| D | OBJECT|0000000000000108| |.data PL_No |0000000008137904| D | OBJECT|0000000000000004| |.data PL_Yes |0000000008137900| D | OBJECT|0000000000000004| |.data [ ... ] PL_curinterp |0000000008138e88| B | OBJECT|0000000000000004| |.bss PL_do_undump |0000000008137910| D | OBJECT|0000000000000001| |.data PL_dollarzero_mutex |0000000008138e58| B | OBJECT|0000000000000018| |.bss PL_fold |000000000812c020| R | OBJECT|0000000000000100| |.rodata PL_fold_locale |0000000008135c80| D | OBJECT|0000000000000100| |.data PL_force_link_funcs |0000000008137da0| D | OBJECT|00000000000006c8| |.data PL_freq |000000000812c120| R | OBJECT|0000000000000100| |.rodata PL_hexdigit |0000000008137908| D | OBJECT|0000000000000004| |.data PL_memory_wrap |000000000812bfa3| R | OBJECT|0000000000000013| |.rodata [ ... ] PerlIO_setpos |0000000008112134| T | FUNC|00000000000000a6| |.text PerlIO_sprintf |00000000081122ee| T | FUNC|000000000000002a| |.text PerlIO_stdio |0000000008138720| D | OBJECT|0000000000000070| |.data PerlIO_stdoutf |0000000008112066| T | FUNC|000000000000003b| |.text [ ... ]

: 샘플

int x = 10;

nm을 통해 그 실행, 그것은 제공 :

$ nm -f sysv xxxx.o 


Symbols from xxxx.o: 

Name   Value   Class  Type   Size  Line Section 

x   |0000000000000000| D | OBJECT|0000000000000004|  |.data 

참고 그것에 의해보고 된 Value 필드는 주소입니다 변수의 내용이 아니라 상기 기호의.

strip을 실행하면이 표가 제거되며 모두 nm에서 "기호 없음"이라고 알립니다.

+0

완벽! 이게 내가 원하는거야. –

관련 문제