.tramp部分的起源和内容是什么?

时间:2012-01-28 23:12:35

标签: ada elf

我知道它们包含trampolines。蹦床是由编译器还是链接器创建的?该部分的格式是什么(它似乎不是代码.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 spec找不到任何内容。

修改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 个答案:

答案 0 :(得分:1)

完全不经意间,我想我偶然发现了答案。 蹦床部分的起源似乎是一种保护功能,特别是在CPU上没有NX位的系统中模拟写XOR执行功能。

因此,根据维基页面,蹦床部分的内容是完成该功能仿真的实际软件机制:

  

在具有更多功能的处理器上,例如Intel i386,W ^ X要求使用CS代码段限制作为“沙子中的线”,地址空间中的一个点,在该点之上不允许执行并且数据是位于,在其下方,允许放置可执行页面。

见1)Write XOR Execute 和2)This discussion

附录:  第7页的this pdf中也提到过。