Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Unrau Alexander                      2:5010/70      15 Oct 2004  17:35:19
 To : All
 Subject : Re: =?koi8-r?B?zsXJ09DPzM7Rxc3ZyiDT1NzLINcgMi40ID8=?=
 -------------------------------------------------------------------------------- 
 
 >> Открываем книжку Орловского "Введение в архитектуру 80386" на 54  
 >> странице
 >> и читаем: "Дескриптор сегмента может быть помечен правами,
 >> ограничивающими множество операций, которые можно производить с его
 >> сегментом. Сегмент кодов может быть помечен как исполняемый или
 >> читаемый.
 >> Сегменты данных могут быть помечены как доступные только для чтения или
 >> для чтения и записи". То есть разместив стэк в сегменте, не имеющем
 >> разрешения на исполнение, - получим неисполняемый стэк.
 NG> Смотрим на ключевое слово "сегмент" и вспоминаем о flat 32-bit memory.
 
 Одноако это не мешает иметь одному процессу несколько "плоских" сегментов,
 отдельно для кода, данных и стека, в каждый из которых отмапленны
 соответствующие страницы памяти.
 
 > Т.е. при работе под управлением ядра Linux _один_ сегмент?! Hу тогда
 > разработчики linux ССЗБ... Может, конечно, побоялись проблем  
 > совместимости с
 > другими аппаратными платформами, но это зря... Hе верю я, что нельзя было
 > обойти эту проблему.
 > Hо я сильно сомневаюсь, что при такой схеме возможно вообще эффективно
 > реализовать защиту памяти. Хотя в подробности не вдавался, так что  
 > спорить не
 > буду.
 
 Применительно к x86 следующий код:
 --------------------------------------------------------
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <stdio.h>
 
 int global_int;
 
 int main()
 {
   char buf[256];
   unsigned short ss, ds, is, cs;
   int fd;
   ssize_t ret;
 
   __asm__("mov %%ss,%0":"=r" (ss));
   __asm__("mov %%ds,%0":"=r" (ds));
   __asm__("mov %%ds,%0":"=r" (is));
   __asm__("mov %%cs,%0":"=r" (cs));
 
   printf("ss - 0x%04X\n", (unsigned int) ss);
   printf("ds - 0x%04X\n", (unsigned int) ds);
   printf("is - 0x%04X\n", (unsigned int) is);
   printf("cs - 0x%04X\n", (unsigned int) cs);
 
   printf("\n---------- /proc/self/maps ----------\n");
 
      fd = open("/proc/self/maps", O_RDONLY);
    while( (ret = read(fd, buf, sizeof(buf)-1)) > 0)
    {
    printf("%.*s",ret, buf);
   }
   printf("\n-------------------------------------\n");
   close(fd);
 
   printf("Addres of stack variable cs - %p\n", &cs);
   printf("Addres of global variable global_int - %p\n", &global_int);
    return 0;
 }
 --------------------------------------------------------
 Выводит такое:
 
 ss - 0x002B
 ds - 0x002B
 is - 0x002B
 cs - 0x0023
 
 ---------- /proc/self/maps ----------
 08048000-08049000 r-xp 00000000 03:04 34095      /home/user/test_seg
 08049000-0804a000 rw-p 00000000 03:04 34095      /home/user/test_seg
 40000000-40014000 r-xp 00000000 03:03 681412     /lib/ld-2.2.4.so
 40014000-40015000 rw-p 00013000 03:03 681412     /lib/ld-2.2.4.so
 40015000-40016000 rwxp 00000000 00:00 0
 40016000-40017000 rw-p 00000000 00:00 0
 40029000-4015b000 r-xp 00000000 03:03 681421     /lib/libc-2.2.4.so
 4015b000-40161000 rw-p 00131000 03:03 681421     /lib/libc-2.2.4.so
 40161000-40165000 rw-p 00000000 00:00 0
 bfffe000-c0000000 rwxp fffff000 00:00 0
 
 -------------------------------------
 Addres of stack variable cs - 0xbffff4e8
 Addres of global variable global_int - 0x8049910
 
 То что сегмент данных и кода равны - в принципе понятно, но я не понимаю
 как тогда они делят в одном сегменте и rw-p и rwxp?
 И вообще зачем им `x` в rwxp (сегменте данных/стека). А ведь зачем-то  
 нужен.
 
 -- 
 Unrau Alexander
 --- ifmail v.2.15dev5
  * Origin: Ye 'Ol Disorganized NNTPCache groupie (2:5010/70)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 неисполняемый стэк в 2.4 ?   Zahar Kiselev   09 Oct 2004 02:46:36 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   09 Oct 2004 05:11:39 
 Re: неисполняемый стэк в 2.4 ?   Sergey_Afonin   09 Oct 2004 13:55:07 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   09 Oct 2004 21:03:42 
 Re: неисполняемый стэк в 2.4 ?   Sergey_Afonin   09 Oct 2004 22:51:14 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   10 Oct 2004 06:11:10 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   09 Oct 2004 20:41:58 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   09 Oct 2004 22:56:48 
 Re: неисполняемый стэк в 2.4 ?   Max Krasilnikov   09 Oct 2004 23:43:53 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   09 Oct 2004 23:57:39 
 Re: неисполняемый стэк в 2.4 ?   Max Krasilnikov   10 Oct 2004 00:08:36 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   10 Oct 2004 01:56:12 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   10 Oct 2004 10:39:22 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   10 Oct 2004 17:12:30 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   11 Oct 2004 01:57:11 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   11 Oct 2004 09:15:57 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   11 Oct 2004 09:27:52 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   11 Oct 2004 09:33:43 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   11 Oct 2004 09:43:40 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   11 Oct 2004 10:15:16 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   11 Oct 2004 11:05:29 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   11 Oct 2004 11:18:25 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   11 Oct 2004 11:29:50 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   12 Oct 2004 15:41:28 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   11 Oct 2004 13:15:34 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   12 Oct 2004 15:56:59 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   12 Oct 2004 15:35:46 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   13 Oct 2004 14:42:50 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   13 Oct 2004 19:53:13 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   12 Oct 2004 19:23:38 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   12 Oct 2004 23:36:14 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   13 Oct 2004 02:33:28 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   13 Oct 2004 11:59:08 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   13 Oct 2004 14:15:14 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   13 Oct 2004 23:07:35 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   14 Oct 2004 00:29:08 
 Re: неисполняемый стэк в 2.4 ?   Roman Belenov   14 Oct 2004 11:40:48 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   15 Oct 2004 22:58:33 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   14 Oct 2004 10:16:11 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   15 Oct 2004 22:56:43 
 Re: неисполняемый стэк в 2.4 ?   Sergey Mudry   13 Oct 2004 23:16:54 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   14 Oct 2004 00:59:28 
 Re: неисполняемый стэк в 2.4 ?   Sergey Mudry   14 Oct 2004 23:47:30 
 Re: неисполняемый стэк в 2.4 ?   Kirill Frolov   15 Oct 2004 00:26:31 
 Re: неисполняемый стэк в 2.4 ?   Zahar Kiselev   13 Oct 2004 21:46:46 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   15 Oct 2004 22:57:32 
 Re: неисполняемый стэк в 2.4 ?   Slava Astashonok   16 Oct 2004 14:07:35 
 Re: неисполняемый стэк в 2.4 ?   Sergey Kudriavtsev   13 Oct 2004 19:56:25 
 Re: неисполняемый стэк в 2.4 ?   Nick Gazaloff   15 Oct 2004 14:49:59 
 Re: =?koi8-r?B?zsXJ09DPzM7Rxc3ZyiDT1NzLINcgMi40ID8=?=   Unrau Alexander   15 Oct 2004 17:35:19 
 Re: неисполняемый стэк в 2.4 ?   Alexei Takaseev   10 Oct 2004 13:15:41 
 Re: неисполняемый стэк в 2.4 ?   Sergey_Afonin   09 Oct 2004 13:55:07 
 Re: неисполняемый стэк в 2.4 ?   Max Krasilnikov   09 Oct 2004 23:45:57 
Архивное /ru.linux/137759b1f1503.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional