2012-05-20 4 views
3

내 프로그램에서 사용할 glibc를 수정하려고합니다. mmap 함수에 몇 가지 코드를 추가하려고합니다 (mmap 시스템 호출이 아니라 mmap 시스템 호출을 수행하는 glibc의 함수). 그러나 소스 코드 디렉토리 안에 여러 mmap 또는 mmap64.c 파일이 있습니다.컴파일러에서 컴파일되는 함수의 위치를 ​​알아 보는 방법

내 아키텍처는 x86-64이므로 다른 아키텍처 디렉토리의 파일은 무시했습니다. 그러나, 나는 컴파일러가 사용하고있는 파일로부터 mmap을 모른다. 의도적으로 mmap 함수를 포함하는 다른 파일에 일부 가비지 코드 (컴파일러에서 오류가 있음)를 삽입했지만 컴파일러는 오류를주지 않고 glibc를 잘 컴파일합니다. 내가 만든 .o 파일도 볼 수 있습니다. 나는 무엇을 해야할지 잘 모릅니다. 컴파일러가 컴파일하는 mmap을 결정하는 쉬운 방법은 무엇입니까?

답변

0

아마도 링커 (ld) 옵션이 도움이 될 것입니다. ld 매뉴얼 페이지, --print-map 또는 --trace 또는 --trace-symbol을 참조하십시오. 오브젝트 파일을 얻으면 해당 헤더 파일을 찾을 수 있어야합니다.

2

컴파일러가 컴파일하는 mmap을 결정하는 쉬운 방법은 무엇입니까? 나는이 목록의 mmap를 입력하면

gdb -q libc.so.6 

Reading symbols from /tmp/build/libc.so.6...done. 
(gdb) list mmap 
76 #else 
77 
78 /* This is a "normal" system call stub: if there is an error, 
79  it returns -1 and sets errno. */ 
80 
81 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS) 
82  ret 
83 T_PSEUDO_END (SYSCALL_SYMBOL) 
84 
85 #endif 
(gdb) info source 
Current source file is ../sysdeps/unix/syscall-template.S 
Compilation directory is /glibc-git-rw/glibc/misc 
Located in /glibc-git-rw/glibc/sysdeps/unix/syscall-template.S <<< You want this 
Contains 87 lines. 
Source language is asm. 
Compiled with DWARF 2 debugging format. 
Does not include preprocessor macro info. 
+0

은, GDB는 어떤 심볼 테이블이로드되지 않습니다 말했다. file 명령을 사용하십시오. – pythonic

+0

@ user1018562 "심볼 테이블이로드되지 않았습니다"- 디버그 정보가없는'libc.so.6'에 GDB를 실행하지 마십시오. 방금 작성한 사본에서 실행하십시오. –

+0

글쎄, 나는 -O2 최적화로 컴파일했다. 나는 이것이 작동하도록 -g 플래그와 최적화가 이루어지지 않아야한다고 생각한다. 권리? – pythonic

관련 문제