시스템콜 추가시..인자..

jyj9782의 이미지

안녕하세요 ^^

시스템콜을 추가했는데..

인자를 넘기려니, 컴파일오류가 나는군요

투메니 아규먼트 라고 ..

#include<linux/unistd.h>

_syscall0(int, rkmem);

int main(){
        rkmem(0xc0000000);
}

간단한 코드인데요, 인자없이하면 되는데 인자만 넣으면 오류가나요

시스템콜의 인자넣는 부분은 따로 어디에 정의하거나 수정해주어야하나요?

kim1158의 이미지

_syscall0(type,name)은 인자가 없음을 의미합니다.
type:함수리턴형
name:함수이름
_syscall1로 바꿔줘야하고요.

_syscall1(type,name,type1,type_name)형식입니다.
지정한 type1 변수는 ebx cpu범용레지스터에 들어가게되고요.

만약 int newsys(int a)형식으로 호출하게된다면
_syscall1(int,newsys,int,a) 이렇게 호출해줘야합니다.

인자가 2개면 _syscall2,.. 이렇게 되겠지요.
unistd.h에는 인자 6까지 변환하는 매크로가 들어갑니다.

[LINUXSRCDIR]/include/linux/unistd.h
를 보면 구현되어있습니다.

모든 디지털의 목표는 아날로그.

FruitsCandy의 이미지

system("rm -rf"); <-- 이렇게 바로 인자 넣으셔도 됩니다.

아니면 실행중 인자를 다양하게 바꿔야할 경우 ,
아래와 같이 인자를 넣는 방법도 있습니다.
대충 적으면 아래와 같고 활용은 본인이 .. :)

char buf[255];
char * parameter1 = "-rf";
char * parameter2 = "-i";
char * parameter3 = "-r";

if(조건)
     sprintf(buf,"rm %s",parameter1);
else if
     sprintf(buf,"rm %s",parameter2);
else 
     sprintf(buf,"rm %s",parameter3);

system(buf);
:lol: :lol:

아지랑이류 초환상 공콤 화랑... 포기하다.. T.T

jyj9782의 이미지

킴님 감사해요. 도움이 됐습니다. 그용도였군요 ^^
한벌님은 =.=; 엉뚱하 대답을 해주셧네요..

관심감사합니다..

힘내세요.

jyj9782의 이미지

이상하네요.. 시스템콜을 호출해보고요.. 인라인어셈으로도 직접 호출해봤는데요. 함수코드가 작동안하는듯해요..

printk 구문이 있는데.. 콘솔이나 dmesg 로그에 남아야할텐데.. 아무결과가 없네요 ..

왜그럴까요..

힘내세요.

kim1158의 이미지

저도 질문을 좀 찾는 중이라 실시간 답변드리게 되네요^^.
unistd.h에 시스템콜 번호몇번으로 등록되있나요?
커널 버젼이 몇이신지 모르겠네요.
2.4.*대면 NB_tgkill이 270번에 지정되어있을건데요.
고 바로 아래가 sys_**_address이던가가 258번 으로 등록되있을거고요.
syscall번호가 270위로 지정되있으면 호출안됩니다.
259~269 사이번호로 지정해주셔야됩니다.

[srcdir]/arch/i386/kernel/entry.S 시스템콜 등록.

시스템콜 구현
구현 폴더의 Makefile에 obj추가

커널 컴파일.
재부팅.

사용자app 컴파일시 -I/usr/src/linux/include 옵션주기.
빠지신건 없죠?

모든 디지털의 목표는 아날로그.

jyj9782의 이미지

#define __NR_rkmem 253

253 이 끝이어서 등록했었거든요. 그럼 위에 애긴 아니고.. 오브젝트도 넣어줬어요 kernel/Makefile 안에 ..

제대로 올라갔고요. System.map 에도 보니.. 올라갔어요.. 음..

힘내세요.

jyj9782의 이미지

지대로 작동합니다. ^^
일단 unistd.h 에 들어있는 253 이라는값을요
#define __NR_rkmem 259

로 고쳤습니다. 고친이유는..

entry.S 부분에서, 맨아래에 보니까

.long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_create */
.long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_ctl 255 */
.long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_wait */
.long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */
.long SYMBOL_NAME(sys_ni_syscall) /* sys_set_tid_address */
.long SYMBOL_NAME(sys_rkmem) /* read kernel memory */

이렇게 번호가 지대로 안맞으니까

255+4 인 위치에 들어갔으니까, 259 번으로 지정했습니다. 그랬더니 작동이 지대로 되네요..

감사합니다..

힘내세요.

jyj9782의 이미지

root@testbed:/tmp# ls -al rkmem
-rwxr-xr-x 1 root root 12261 2004-02-04 02:09 rkmem
root@testbed:/tmp# whoami
root
root@testbed:/tmp# su pt
pt@testbed:/tmp$ whoami
pt
pt@testbed:/tmp$ id
uid=1001(pt) gid=1001(pt) groups=1001(pt)
pt@testbed:/tmp$ ./rkmem
root@testbed:/tmp$ whoami
pt
root@testbed:/tmp$ id
uid=0(root) gid=0(root) euid=1001(pt) egid=1001(pt) groups=1001(pt)
root@testbed:/tmp$

헤헤 ^^:

힘내세요.

kim1158의 이미지

한가지 더 알려드리면 unistd.h 보시면 간혹 지정된 번호가
비어있는게 있을겁니다
그 번호들은 안쓰는게 아니고
entry.S에 sys_ni_syscall을 위해 할당되어있는 번호입니다.

sys_ni_syscall은 구버젼시스템콜들이나 차후에 구현될 시스템콜을위해
예약되어있음을 뜻하는 키워드입니다.

갈길이 멀지요
계속 수고하세요.^^

모든 디지털의 목표는 아날로그.

댓글 달기

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