read를 추적하는 방법을 알고싶습니다.

hermes의 이미지

시스템콜을 추적해서 동작 과정을 분석하게 되었습니다.

그런데 '시스템콜 추적'이라고 검색하면 strace 프로그램을 사용하라는 글밖에 보이지 않더군요.

저는 어떤 시스템콜들이 실행되고있는가가 아니라, 한 시스템콜이 내부적으로 어떤 함수를 호출하고, 또 그 함수들은 내부적으로 어떤 함수를 호출하는지를 알고싶은데 말이죠.. ㅠㅠ (그 중에서도 read 함수를 분석하고 싶은데 말이죠..)

일단 파일을 열어서 읽고 닫는 프로그램을 작성해 본 결과, read 함수는 glibc 안에 있을 거라는 결론을 내렸습니다.
그리고 glibc 소스를 다운받아서 read를 찾고 있는데...
이게 아무리 찾아봐도 보이질 않네요.. ㅠㅠ

대체 read 함수의 정의 부분은 어디에 있는 걸까요?

jachin의 이미지

(답글 달면 또 돌 날라올지도 모르겠지만)
시스템 콜 함수명을 아시면 리눅스 커널 내에서 찾으실 수 있으실 겁니다.
C 언에서 사용하는 read( ) 함수를 찾으시는 것이려나요...?
파일시스템에 대한 접근 함수이기 때문에,
내부 동작은 커널에서 확인하셔야 할 겁니다.

(나는 분명 M인가보다... 까이고 싶다... 아아...)

hermes의 이미지

우선은 read 함수부터 분석하여서
최종적으로 sys_read가 호출되기까지를 알아보려구요.

그리고 더 나아가서는 sys_read 내부도 어떻게 생겼는지 보고싶기는 하지만요.

우선은 read 함수부터 보려고 하는데 이건 glibc에 있지 않나 해서요.

read 함수 자체도 커널에 구현되어 있나요?

jachin의 이미지

glibc 에서 unistd.h 에 있는 read 를 보시면, pread 로 연결되는 것을 보실겁니다.

실제 sys_read 까지 가는데에는 pread 를 통해 따라가시는 것이 좋습니다.

hermes의 이미지

read 함수 부분은 겨우겨우 찾았습니다.

단지 그 함수 안에 내용이 도저히 이해가 안 되는 것이 문제로군요... ㅠㅠ

게다가 gcc의 __attribute__가 사용되니까 더욱 복잡한 것 같습니다.
어쨌든 답글 감사합니다. 많은 도움이 되었습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.