2012-01-24 6 views
5

(Linux amd64) .o 파일에서 objdump -d를 실행하면 링크 시간 확인없이 함수 호출이 표시됩니다. 예 : 함수 내의 브랜치가 올바르게 나타나 있지만 callq은 링커에 넣어 막 그루터기objdump 및 로컬 함수 호출의 연결을 해결 하시겠습니까?

90: 66 89 44 24 1c   mov %ax,0x1c(%rsp) 
    95: 44 89 74 24 10   mov %r14d,0x10(%rsp) 
    9a: e8 00 00 00 00   callq 9f <foo+0x9f> 
    9f: 83 f8 ff    cmp $0xffffffffffffffff,%eax 
    a2: 74 5e     je  102 <foo+0x102> 

(링커 가능한 제로 네 바이트에 적절한 어드레스를 넣어).

실제로 링크하지 않고 함수 이름이 해석 된 어셈블리 목록을 가져 오는 방법이 있습니까? 결국 사용할 주소, 함수 이름 만 신경 쓰지 않습니다. 이 정보는 링커가 작업을 수행하기 위해 소비해야하기 때문에 .o 파일에 있어야합니다.

문제의 코드가 들어간 공유 라이브러리가 약 140MB이고 약 길이의 objdump -d를 실행하여 asm 덤프를 얻는 데 걸리는 시간이 실제 함수로 확인 되었기 때문에 물어 봅니다. 이름.

+0

사용합니다. nm을 실행하여 거대한 공유 라이브러리에서 함수 주소를 얻은 다음 nm 출력을 사용하여 --start-address를 사용하여 objdump를 실행할 수 있습니다. 나는 원래 질문에 대한 대답에 여전히 관심이있다. 가능하다면. –

답변

12

실제로 링크하지 않고 함수 이름이 해석 된 어셈블리 목록을 가져 오는 방법이 있습니까?

예 : 내 특정 문제에 대한 해결 방법을 알아 냈어요 objdump -dr foo.o