시스템콜 추가 문제2 ㅜ.ㅜ

cjy1126의 이미지

codebank님께서 답변해주신 방법으로 어제 문제를 해결하였습니다.

이번에 문제는... 그 아래에 또 다른 시스템콜을 추가하였을때의 문제입니다.

1. include/asm-i386/unistd.h 파일에 __NR_newsyscall 추가
코드:

#define __NR_newsyscall   259
#define __NR_newsyscall2  260

2. arch/i386/kernel/entry.S 에 sys_newsyscall 추가
코드:

.long SYMBOL_NAME(sys_newsyscall)
.long SYMBOL_NAME(sys_newsyscall2)

.rept NR_syscalls-(.-sys_call_table)/4       << 이부분이 이해가 안되네요. 책에는 .rept NR_syscalls-191(마지막 시스템콜 번호. 저의경우는 260) 이렇게 나왔습니다.
     .long SYMBOL_NAME(sys_ni_syscall)
.endr

이렇게 2개를 추가하고 커널컴파일을 하였을때는 newsyscall1은 제대로 실행이되고, 마지막 시스템콜인 newsyscall2는 불러도 반응이 없습니다.(그냥 프롬프트만 떨어집니다.)

2번째 시스템콜이 잘못된것인가해서 3번째 시스템콜을 추가해서 테스트해봤는데, 역시 1번째 시스템콜을 제외하고는 아무 반응이 없습니다.

그래서 1번인 newsyscall과 3번인 newsyscall3을 지우고 newsyscall2 1개만을 추가해서 실행해봤는데... 이 경우에는 제대로 실행이됩니다.

지금 문제는 시스템콜을 딱1개만을 추가해서 실행하는것이 문제라 시스템콜을 계속 바꿔가면서 공부하면 해결됩니다.

하지만, 2개이상의 시스템콜을 추가해야할때가 필요할것 같아서 질문 올립니다.(커널에 제가 만든 시스템콜을 모아두고 싶기도 하고요. :D )

제가 사용하는 리눅스는 RedHat 9.0 이고, 커널 버전은 2.4.20-8c 입니다.

답변 부탁드리고... 즐거운 이브되세요 ^^

ps: 저에게는 저주받은 이브 ㅜ.ㅜ

능력이 없어서... 내일도 학원나와야하는 블랙 크리스마스 ㅜ.ㅜ

커널쪽으로 q&a같은 게시판이나 활동이 활발한 사이트 좀 알려주세요.

azalei의 이미지

몇가지 의문점이 있습니다.

1. NR_syscalls이 어떤 값으로 정의 되어 있는지 궁금합니다.

#define __NR_newsyscall   259 
#define __NR_newsyscall2  260 

위의 코드상으로는 256이상으로 설정되었을 것 같습니다만...

2. 위의 코드상으로는 NR_syscalls이 256 이상으로 정의된 것 같습니다. 현재 커널 2.4.20에서는 시스템콜을 252개를 구현했거나 구현을 위해 예약하고 있습니다.
그러면 253~258사이의 sys_call_table은 어떤식으로 처리하였는지요?
아래 코드의 바로 윗부분을 보여주셔도 됩니다.


.long SYMBOL_NAME(sys_newsyscall) 
.long SYMBOL_NAME(sys_newsyscall2) 

.rept NR_syscalls-(.-sys_call_table)/4       << 이부분이 이해가 안되네요. 책에는 .rept NR_syscalls-191(마지막 시스템콜 번호. 저의경우는 260) 이렇게 나왔습니다. 
     .long SYMBOL_NAME(sys_ni_syscall) 
.endr 
namhw의 이미지

http://linuxkernel.net/

q&a가 제가 가본 국내 홈페이지 중에서 가장
활발한것 같습니다.

촌놈.

cjy1126의 이미지

/usr/src/linux/include/asm/unistd.h 입니다.

#define __NR_alloc_hugepages    250
#define __NR_free_hugepages     251
#define __NR_exit_group         252
#define __NR_lookup_dcookie     253
#define __NR_set_tid_address    258

/usr/src/linux/arch/i386/kerenl/entry.S 입니다.

        .long SYMBOL_NAME(sys_ni_syscall)       /* 250 sys_alloc_hugepages */
        .long SYMBOL_NAME(sys_ni_syscall)       /* sys_free_hugepages */
        .long SYMBOL_NAME(sys_exit_group)
        .long SYMBOL_NAME(sys_lookup_dcookie)
        .long SYMBOL_NAME(sys_ni_syscall)
        .long SYMBOL_NAME(sys_ni_syscall)       /* 255 sys_epoll_ctl */
        .long SYMBOL_NAME(sys_ni_syscall)       /* sys_epoll_wait */
        .long SYMBOL_NAME(sys_ni_syscall)       /* sys_remap_file_pages */
        .long SYMBOL_NAME(sys_set_tid_address)
                                                                                                                                                             
                                                                                                                                                             
        .rept NR_syscalls-(.-sys_call_table)/4
                .long SYMBOL_NAME(sys_ni_syscall)
        .endr
azalei의 이미지

제일 의심스러운 부분이 NR_syscalls가 어떤 값으로 정의되어 있는지 궁금했는데 그 부분은 안올려주셨네요. :D

증상이 시스템 콜을 한개만 추가하면 올바르게 동작하고 그 이상이면 동작하지않는다고 하셨는데 NR_syscallls값이
너무 작게 설정되어서 추가된 시스템콜이 오버플로우가 났는지 의심했습니다.

한번 확인해 보시죠. 현재 소스상으로는 260으로 설정되어 있으면 NR_syscalls문제이고 그렇지 않으면
다른 문제인 것 같습니다.

그럼 수고하세요..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.