Find the answer to your Linux question:
Results 1 to 8 of 8
What is the meaning of the struct pt_regs argument to sys_fork? (This seems like a trivial question, but I've had no luck finding the answer, in the source code or ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1
    Just Joined!
    Join Date
    Mar 2006
    Posts
    34

    sys_fork arguments


    What is the meaning of the struct pt_regs argument to sys_fork? (This seems like a trivial question, but I've had no luck finding the answer, in the source code or otherwise.)

  2. #2
    Banned CodeRoot's Avatar
    Join Date
    Sep 2005
    Posts
    567
    From '/usr/include/asm/ptrace.h':

    Code:
    /* this struct defines the way the registers are stored on the 
       stack during a system call. */
    
    struct pt_regs {
        long ebx;
        long ecx;
        long edx;
        long esi;
        long edi;
        long ebp;
        long eax;
        int  xds;
        int  xes;
        long orig_eax;
        long eip;
        int  xcs;
        long eflags;
        long esp;
        int  xss;
    };

  3. #3
    Just Joined!
    Join Date
    Mar 2006
    Posts
    34
    I'm familiar with the definition of the structure; it contains a set of registers. My question is what it means to sys_fork.

  4. $spacer_open
    $spacer_close
  5. #4
    Banned CodeRoot's Avatar
    Join Date
    Sep 2005
    Posts
    567
    Oh, sorry...

    Try this:

    Code:
    man ptrace

  6. #5
    Linux User fernape's Avatar
    Join Date
    Dec 2005
    Location
    Holland
    Posts
    301
    With pt_regs you have the __NR_number (the sys_call_table index) and the parameters passed to the syscall (eax, ebx, ecx... in order).

    As previously said, it is useful for tracing and debugging.

    Best regards!

  7. #6
    Just Joined!
    Join Date
    Dec 2006
    Posts
    2
    I am wondering how could I call sys_fork() with appropriate parameters..as in how do i contruct the parameter to be passed?

    Thanks,
    Neelam

  8. #7
    Linux User fernape's Avatar
    Join Date
    Dec 2005
    Location
    Holland
    Posts
    301
    You can't or better, you should not.

    It is a syscall that means that it is an interface between user space and kernel space. The compiler put the proper values into the registers, so when you make a fork() in user space, it calls to system_call assembler routine by means of the int 0x80 (and in modern processors and kernels with the SYSENTER instruction provided by Intel)

    So there is not need to put any values by hand.

    Best Regards

  9. #8
    Just Joined!
    Join Date
    Dec 2006
    Posts
    2
    Thanks a lot..I decided not to call it inside the kernel...

    Regards..

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •