Каково происхождение и содержание разделов .tramp? - PullRequest
0 голосов
/ 29 января 2012

Я понимаю, что они содержат батуты .Батуты созданы компилятором или компоновщиком?Каков формат раздела (он не является кодом. Objdump -d не может его разобрать)?

Есть ли возможность подавить их создание?

  Nr Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  16 .tramp            PROGBITS        0xxxxxxx 0xxxxx 0000xx 00   A  0   0  4

Я не смог найти ничего в спецификации ELF .

Изменить 2012.01.30:

Немного больше информации по этому вопросу.Код генерируется компилятором MaxAda (версия 3.5.1) и каким-то образом связан с Ada Runtime.

Единственный символ, который ссылается на раздел .tramp, это

4379: 080xxxxx     0 OBJECT  GLOBAL DEFAULT   16 A$rts_bounce_list

Построил файл карты компоновщика и обнаружил, что символ возник из:

/usr/ada/i86_3.5.1/lib/libruntime.bart.a(bounce.red_hat.o)
     /usr/ada/i86_3.5.1/lib/libruntime.bart.a(ada.rts.elaboration.runtimeB) (A$rts_bounce_list)

Шестнадцатеричный дампраздела (objdump) дает:

Contents of section .tramp:
 80xxxa8 01000000 90e70708 22e80708 01000000  ........".......
 80xxxb8 24e80708 17eb0708 01000000 4cec0708  $...........L...
 80xxxc8 4cee0708 01000000 4cee0708 c2f00708  L.......L.......
 80xxxd8 01000000 701d0808 1f1e0808 01000000  ....p...........
 80xxxe8 70400808 c6410808 02000000 ac960808  p@...A..........
 80xxxf8 00000000 02000000 00000000 00000000  ................
 80xxy08 02000000 00000000 00000000 03000000  ................
 80xxy18 66400808 01000000 02000000 349d0808  f@..........4...
 80xxy28 00000000 02000000 00000000 00000000  ................

Руководство совершенно бесполезно:

Pragma TRAMPOLINE
NOTE : Pragma TRAMPOLINE is reserved for internal MAXAda use only;
it is not intended for use in user-defined code.

1 Ответ

1 голос
/ 21 февраля 2012

Совершенно случайно думаю, что наткнулся на ответ. Истоки секции батута, похоже, представляют собой функцию защиты, в частности эмулирующую функцию Write XOR Execute в системах, в которых нет NX-бита в CPU.

Таким образом, содержимое секции батута является фактическим программным механизмом для эмуляции функции, согласно странице вики:

На процессорах с более ограниченными функциями, таких как Intel i386, W ^ X требует использования предела сегмента кода CS в качестве «строки в песке», точки в адресном пространстве, выше которой выполнение запрещено, а данные находится, и ниже которого разрешены и размещены исполняемые страницы.

См. 1) Запись XOR Выполнить и 2) Это обсуждение

Приложение: Также упоминается в этом pdf на стр. 7.

...