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


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Oleg Drokin                          2:5020/400     19 May 2003  22:12:38
 To : Valentin Nechayev
 Subject : Re: SuSE 8.2 sucks ???
 -------------------------------------------------------------------------------- 
 
 Hello!
 
 Valentin Nechayev <netch@segfault.kiev.ua> wrote:
 
 AB>>> Вас смутили нопы ? Очень похоже на обычное выравнивение по границе слова 
 AB>>> памяти. Это вообще ни о чем не говорит. Что внутри бинарников самого 
 OD>> С каких пор у нас на x86 (на pentium обычном, заметим) 128ми битное слово?
 VN> С памятью он работает, кстати, вот такими вот словами.
 
 Угу, я знаю. Hо почему же весь из себя продвинутый gcc 3.3-release так больше
 не делает? Да и какой смысл выравнивание прямо перед прыжком делать?
 
 OD>> Выравнивание прямо перед вызовом функции? Hовое слово в оптимизации, надо
 OD>> думать. А перед этим, еще и двойной jump для большей оптимизации. И как ни 
 OD>> странно ни gcc 3.3 релиз, ни gcc 3.2.3 ни gcc 2.95 к такой "оптимизации" не
 OD>> прибегают. Еще обратите внимание куда прыгает последний call ... Hу я
 OD>> конечно
 VN>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 OD>> знаю что некоторые продвинутые
 OD>> обфускаторы используют такую технику, но чтобы обычный gcc...
 VN> Вот очень похожий "кривой" пример из моего демонстрационного объектника:
 VN> (текст функции: `int f(void) { return g(); }' ) с тем отличием, что был
 VN> 2.95.4, а не 3.2:
 VN> (objdump -d объектника)
 VN> 00000010 <f>:
 VN>   10:   55                      push   %ebp
 VN>   11:   89 e5                   mov    %esp,%ebp
 VN>   13:   83 ec 14                sub    $0x14,%esp
 VN>   16:   53                      push   %ebx
 VN>   17:   e8 00 00 00 00          call   1c <f+0xc>
 VN>   1c:   5b                      pop    %ebx
 VN>   1d:   81 c3 03 00 00 00       add    $0x3,%ebx
 VN>   23:   e8 fc ff ff ff          call   24 <f+0x14>
 VN>   28:   5b                      pop    %ebx
 VN>   29:   89 ec                   mov    %ebp,%esp
 VN>   2b:   5d                      pop    %ebp
 VN>   2c:   c3                      ret
 VN> Видим кучу левых действий и тот же мнимый переход на следующий байт
 VN> (смещение 23, hex).
 VN> А вот что из этого сделал линкер в готовой so'шке:
 VN> 00000550 <f>:
 VN>  550:   55                      push   %ebp
 VN>  551:   89 e5                   mov    %esp,%ebp
 VN>  553:   83 ec 14                sub    $0x14,%esp
 VN>  556:   53                      push   %ebx
 VN>  557:   e8 00 00 00 00          call   55c <f+0xc>
 VN>  55c:   5b                      pop    %ebx
 VN>  55d:   81 c3 28 11 00 00       add    $0x1128,%ebx
 VN>  563:   e8 d0 fe ff ff          call   438 <_init+0x1c>
 VN>  568:   5b                      pop    %ebx
 VN>  569:   89 ec                   mov    %ebp,%esp
 VN>  56b:   5d                      pop    %ebp
 VN>  56c:   c3                      ret
 VN> О чудо!!! - каким-то образом код стал нормальным, call стал
 VN> показывать на нормальное место... Hеожиданно, да-а?
 VN> А всё почему? А потому что -fPIC. Олег, Вы точно уверены, что никакой
 VN> PIC туда не затесался?
 
 Да. Это ж кернел, какой же там PIC? ;)
 Вот типичная строка компиляции:
   gcc -Wp,-MD,drivers/char/.pty.o.d -D__KERNEL__ -Iinclude -Wall
 -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common
 -U__i386__ -Ui386 -g -D__arch_um__ -DSUBARCH=\"i386\" -D_LARGEFILE64_SOURCE
 -Iarch/um/include -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask
 -I/home/green/bk_work/reiser4-linux-2.5/arch/um/kernel/tt/include
 -I/home/green/bk_work/reiser4-linux-2.5/arch/um/kernel/skas/include -nostdinc
 -iwithprefix include    -DKBUILD_BASENAME=pty -DKBUILD_MODNAME=pty -c -o
 drivers/char/pty.o drivers/char/pty.c
 OD>> Hу вот я счас еще и бинарники дистрибутива полезу разгребать ;) Мне хватает
 OD>> тех что оно мне накомпилило.
 VN> А вот загляните в бинарники. Хотя бы свои после линковки. Мне кажется, что
 
 Hу дык глядел ясное дело.
 
 VN> там все эти чудеса вдруг пропадут... Включая странные jmp'ы...
 VN> (Эх, видимо, нет у Вас background'а возни с объектными файлами. А то знали
 VN> бы, что в таких call'ах в поле смещения может стоять что угодно. Hапример,
 VN> смещение следующего такого call'а от начала секции...)
 
 Гм.
 Hу ладно, вот я пошел и пересобрал все заново старым компилером, сделал
 objdump linux. Правда код с тех пор изменился, тем не менее прикол с двойным
 джампом и кучей нопов все равно наблюдается, на этот раз в другом месте:
 a0143b00:       c3                      ret    
 a0143b01:       eb 0d                   jmp    a0143b10 <carry_insert_flow+0x90>
 a0143b03:       90                      nop    
 a0143b04:       90                      nop    
 a0143b05:       90                      nop    
 a0143b06:       90                      nop    
 a0143b07:       90                      nop    
 a0143b08:       90                      nop    
 a0143b09:       90                      nop    
 a0143b0a:       90                      nop    
 a0143b0b:       90                      nop    
 a0143b0c:       90                      nop    
 a0143b0d:       90                      nop    
 a0143b0e:       90                      nop    
 a0143b0f:       90                      nop    
 a0143b10:       8b 55 10                mov    0x10(%ebp),%edx
 
 Искать старый код мне счас лениво, завтра посмотрю.
 
 Bye,
     Oleg
 --- ifmail v.2.15dev5
  * Origin: Green's home news server (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 SuSE 8.2 sucks   Oleg Drokin   16 May 2003 09:55:40 
 Re: SuSE 8.2 sucks   Alexandr S. Agranovsky   16 May 2003 23:22:30 
 Re: SuSE 8.2 sucks   Oleg Drokin   17 May 2003 12:33:34 
 SuSE 8.2 sucks   Alexander Stavitsky   19 May 2003 16:23:08 
 Re: SuSE 8.2 sucks ???   Aleksey Barabanov   17 May 2003 00:14:23 
 Re: SuSE 8.2 sucks ???   Oleg Drokin   17 May 2003 12:48:44 
 Re: SuSE 8.2 sucks ???   Aleksey Barabanov   17 May 2003 13:12:26 
 Re: SuSE 8.2 sucks ???   Oleg Drokin   17 May 2003 14:45:20 
 Re: SuSE 8.2 sucks ???   Aleksey Barabanov   17 May 2003 23:54:08 
 Re: SuSE 8.2 sucks ???   Valentin Nechayev   19 May 2003 21:17:13 
 Re: SuSE 8.2 sucks ???   Oleg Drokin   19 May 2003 22:12:38 
 Re: SuSE 8.2 sucks ???   Valentin Nechayev   19 May 2003 22:29:24 
 Re: SuSE 8.2 sucks ???   Oleg Drokin   19 May 2003 23:45:02 
 Re: SuSE 8.2 sucks ???   Valentin Nechayev   20 May 2003 10:19:41 
 Re: SuSE 8.2 sucks ???   Aleksey Barabanov   19 May 2003 22:41:45 
 SuSE 8.2 sucks   Ivan Melnikov   18 May 2003 11:35:36 
Архивное /ru.linux/155508f84427d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional