2012-06-09 2 views
2

Windows의 경우 stat 및 거의 모든 다른 C/POSIX 기능 Windows 소모품은 C 런타임 라이브러리 인 msvcrt.dll에 정의되어 있습니다.Linux에서 POSIX 함수 "stat"의 정의는 어디에 있습니까?

리눅스에서는 POSIX C 함수가 시스템 호출이라는 것을 많이 알고 있습니다. 또한 프로그램을 링크 할 때 정의되지 않은 참조를 가질 수 없다는 것도 알고 있습니다. 모든 so 파일을 /lib/usr/libstat 또는 "mangled/prefixed"기호로 검색했지만 아무 것도 찾지 못했습니다.

objdump -T /lib/*.so* /usr/lib/*.so* | grep "stat" 

그것은 내가 찾던 stat을 설정하지 않았다 : 이것은 내가 사용하는 명령입니다.

제 질문은 다음과 같습니다. 그게 어디 있고 다른 "시스템 호출"이 정의되어 있습니까?

내 리눅스 시스템에서
+1

@krynr 내가 무엇을 그가 원하는 것은 커널을 호출하는 스텁 코드라고 생각합니다. 내 생각 엔'.o' 파일이'.so' 검색에서 탈출했다는 것입니다 만, 리눅스가 편리하지는 않습니다. – Potatoswatter

+0

@krynr 힘들게 도움이되지 않습니다. 링커는 정의 또는 전달 된 정의가 들어있는 라이브러리 또는 실행 파일을 링크해야합니다 (가져 오기 라이브러리의 경우). – rubenvb

+0

@rubenvb : 당신은 선언을 의미합니다. 그것은 뭔가 다른 것입니다. 잠시만. – Florian

답변

2

libc을 사용하지 않고도 linux kernelsystem calls을 만들 수 있습니다 (하지만 이는 좋지 않은 방법입니다). Linux Assembly Howto은 (그 장 5 & 6) 어떻게하는지 (x86 Linux 32 비트 이상에서) 설명합니다.

그러나 나는 그것이 나쁜 생각이라고 생각합니다. libc을 통과하는 것은 좋은 습관이며 더 빠를 수도 있습니다 (예 : VDSO). 더 휴대하기 편리합니다.

+0

정말 질문에 대한 답변이 아닌 것처럼 보일 수도 있지만,이 질문에 대한 답변은 ':'입니다. 감사. – rubenvb

3

, 나는 모든 stat이 모호의 /usr/lib/libc.a

+0

글쎄, 지금은 바보 같아. 목록은 상상했던 것보다 훨씬 길다. 그래서 나는'msvcrt.dll'을 윈도우에서 빠뜨릴 수있는 방법으로 리눅스에서'libc'를 "덤프"할 수있는 방법이 없다고 생각합니다. – rubenvb

+0

물론'libc.a'에서'stat' 코드를 덤프 할 수 있지만 @krynr은'stat' 실제 코드가 커널에 있다는 것을 언급했습니다. libc에서는 기본적으로 syscall 호출 만 찾습니다. – ouah

+0

좀 더 인터넷 검색을 통해 저의 '유성음'사용을 지적합니다. 이것이 저수준 Windows API 함수 호출의 올바른 아날로그일까요? – rubenvb

1

최초의 stat (약한) 기호와 __stat (비 약세를) 찾을 수 있습니다; stat syscall이 있고 사용자 공간에서 호출 할 수있는 stat 함수가 syscall을 호출합니다. 마지막 함수는 (내 시스템에서) 적어도 /usr/include/sys/stat.h에 정의되어있다 (맞다. 헤더 파일에있다). 실제로 컴파일러와 시스템 및 썸네일에 따라 여러 정의가 있습니다 (예 : __fxstat과 같이 다른 함수를 호출하는 하나의 라이너 모두).

아무튼, stat (및 다른 syscalls)은 커널을 호출하는 래퍼 (일반적으로 많은 오케스트레이션이 있음)입니다. 그래서 내가 처음에 당신이 의미하는 것에 대해 혼란스러워했습니다. 나는 비록 도움이되지 않는 첫 번째 코멘트에도 불구하고 도움을 줄 수 있기를 바랍니다.

+0

이 질문의 기원은 Windows에서'stat'와'libc' /'msvcrt'와 같은 것을 우회하여 직접'kernel32 '를 호출 할 수 있다는 것입니다. 그러한 일이 리눅스에서 "쉽게"/ 안전하게 이루어질 수 있는지 알고 싶습니다. – rubenvb

+1

@rubenvb :'syscall' 또는'__SYSCALL'을 사용할 수 있습니다. 그러나 플랫폼에 의존 할 것입니다. – Florian

+0

나는이 질문에 태그를 붙였다. Linux? 아니면 건축에 의존한다는 뜻입니까? – rubenvb

관련 문제