linux segment

Fan Yang lljyangfan at gmail.com
Sun Oct 28 10:02:47 EDT 2012


2012/10/27 Jun Hu <duanshuidao at hotmail.com>

>   Can you post out your codes ?
>
>  *From:* Fan Yang <lljyangfan at gmail.com>
> *Sent:* Wednesday, October 24, 2012 8:04 PM
> *To:* kernelnewbies at kernelnewbies.org
> *Subject:* linux segment
>
> Hi all:
>     I print the cs ds and ss register in the user space, and it is same as
> the __USER_CS and __USER_DS which defined in kernel as 73 and 7b. In the
> kernel __KERNEL_CS and __KERNEL_DS defined as 60 and 68, but when I print
> this two value in my kernel module, I get 60 and 7b. Why ? It should be 60
> and 68, shouldn't it?
>
>
>
> ------------------------------
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
> Hi Jun Hu
    There is my code which run at the user space:

  1 #include<stdio.h>
  2 main()
  3 {
  4     unsigned long cs, ds, ss, es, fs, gs;
  5     asm volatile("movl %%CS,%0\n\t":"=r"(cs));
  6     asm volatile("movl %%DS,%0\n\t":"=r"(ds));
  7     asm volatile("movl %%SS,%0\n\t":"=r"(ss));
  8     asm volatile("movl %%ES,%0\n\t":"=r"(es));

  9     asm volatile("movl %%FS,%0\n\t":"=r"(fs));
 10     asm volatile("movl %%GS,%0\n\t":"=r"(gs));
 11     printf ("**********************************\n");
 12     printf ("cs %lx\t%ld\n", cs, cs);
 13     printf ("ds %lx\t%ld\n", ds, ds);
 14     printf ("ss %lx\t%ld\n", ss, ss);
 15     printf ("es %lx\t%ld\n", es, es);
 16     printf ("fs %lx\t%ld\n", fs, fs);
 17     printf ("gs %lx\t%ld\n", gs, gs);
 18     printf ("**********************************\n");
 19 }



and the result of the progress in my machine is


**********************************
cs 73 115
ds 7b 123
ss 7b 123
es 7b 123
fs 0 0
gs 33 51
**********************************


so, you can see the cs and ds register is 73 and 7b which are same as the
kernel defined.  And the code of the kernel module is


 1 #include<linux/init.h>

  2 #include<linux/kernel.h>
  3 #include<linux/module.h>
  4
  5 static void __init print_init (void)
  6 {
  7     unsigned long cs, ds, ss, es, fs, gs,currenttime;
  8     asm volatile("movl %%CS,%0\n\t":"=r"(cs));
  9     asm volatile("movl %%DS,%0\n\t":"=r"(ds));
 10     asm volatile("movl %%SS,%0\n\t":"=r"(ss));
 11     asm volatile("movl %%ES,%0\n\t":"=r"(es));
 12     asm volatile("movl %%FS,%0\n\t":"=r"(fs));
 13     asm volatile("movl %%GS,%0\n\t":"=r"(gs));
 14     printk ("**********************************\n");
 15     printk ("cs %lx\t%ld\n", cs, cs);
 16     printk ("ds %lx\t%ld\n", ds, ds);
 17     printk ("ss %lx\t%ld\n", ss, ss);
 18     printk ("es %lx\t%ld\n", es, es);
 19     printk ("fs %lx\t%ld\n", fs, fs);
 20     printk ("gs %lx\t%ld\n", gs, gs);
 21     printk ("**********************************\n");
 22
 23 }
24
 25 static void __exit print_exit (void)
 26 {
 27     unsigned long cs, ds, ss;
 28     asm volatile("movl %%cs,%0\n\t":"=r"(cs));
 29     asm volatile("movl %%ds,%0\n\t":"=r"(ds));
 30     asm volatile("movl %%ss,%0\n\t":"=r"(ss));
 31
 32     printk ("**********************************\n");
 33     printk ("cs %lx\t%ld\n", cs, cs);
 34     printk ("ds %lx\t%ld\n", ds, ds);
 35     printk ("ss %lx\t%ld\n", ss, ss);
 36     printk ("**********************************\n");
 37     printk ("*****************bye***************\n");
 38 }
 39
 40 module_init (print_init);
 41 module_exit (print_exit);

 42 MODULE_LICENSE ("GPL");


the result of the running this module is

[root at shell--box kernel_mod]# dmesg -c
**********************************
cs 60 96
ds 7b 123
ss 68 104
es 7b 123
fs d8 216
gs e0 224
**********************************

The cs and ds in the kernel space is 60 and 7b. But the kernel define the
 KERNEL_CS as 60 and the KERNEL_DS as 7b.  Where am I wrong?


Thanks
Fan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20121028/789c9030/attachment.html 


More information about the Kernelnewbies mailing list