2016-08-08 10 views
1

Ich versuche, mit -msecure-Plt zu kompilieren, und obwohl die Kompilierung gut abgeschlossen ist, sieht es bei der Betrachtung der Speicherkarten nicht so aus, als würde die Flagge tatsächlich etwas tun. Ich gehe davon aus, dass es nichts tut, weil die Got und Plt Abschnitte immer noch in RWXP Segmenten sind.Powerpc -msecure-plt Überprüfung

Dump of assembler code for function main: 
0x1000061c <+0>:  stwu r1,-16(r1) 
0x10000620 <+4>:  mflr r0 
0x10000624 <+8>:  stw  r0,20(r1) 
0x10000628 <+12>: stw  r31,12(r1) 
0x1000062c <+16>: mr  r31,r1 
0x10000630 <+20>: bl  0x1001096c <[email protected]> 
0x10000634 <+24>: mr  r10,r3 
0x10000638 <+28>: lis  r9,4096 
0x1000063c <+32>: addi r3,r9,2048 
0x10000640 <+36>: mr  r4,r10 
0x10000644 <+40>: crclr 4*cr1+eq 
0x10000648 <+44>: bl  0x10010964 <[email protected]> 
=> 0x1000064c <+48>: li  r9,1 
0x10000650 <+52>: mr  r3,r9 
0x10000654 <+56>: addi r11,r31,16 
0x10000658 <+60>: lwz  r0,4(r11) 
0x1000065c <+64>: mtlr r0 
0x10000660 <+68>: lwz  r31,-4(r11) 
0x10000664 <+72>: mr  r1,r11 
0x10000668 <+76>: blr 

mit /proc/<pid>/maps eine Speicherkarte

00100000-00103000 r-xp 00000000 00:00 0   [vdso] 
0fe40000-0ffb8000 r-xp 00000000 00:01 6285  /lib/libc-2.22.so 
0ffb8000-0ffc7000 ---p 00178000 00:01 6285  /lib/libc-2.22.so 
0ffc7000-0ffc9000 r--p 00177000 00:01 6285  /lib/libc-2.22.so 
0ffc9000-0ffcd000 rwxp 00179000 00:01 6285  /lib/libc-2.22.so 
0ffcd000-0ffcf000 rwxp 00000000 00:00 0 
0ffdf000-0ffe0000 r-xp 00000000 00:01 5928  /lib/libmaintest.so 
0ffe0000-0ffef000 ---p 00001000 00:01 5928  /lib/libmaintest.so 
0ffef000-0fff0000 rwxp 00000000 00:01 5928  /lib/libmaintest.so 
10000000-10001000 r-xp 00000000 00:01 5934  /root/main 
10010000-10011000 rwxp 00000000 00:01 5934  /root/main 
b7860000-b7882000 r-xp 00000000 00:01 6240  /lib/ld-2.22.so 
b7890000-b7892000 rw-p 00000000 00:00 0 
b7892000-b7893000 r--p 00022000 00:01 6240  /lib/ld-2.22.so 
b7893000-b7895000 rwxp 00023000 00:01 6240  /lib/ld-2.22.so 
bff1a000-bff3b000 rw-p 00000000 00:00 0   [stack] 

zeigt, die beide von dem Grundstück klebt rechts in der Mitte eines rwx Abschnitt springt. Fehle ich diese Information falsch?

Antwort

1

Ich denke, das könnte eine Kernel-Beschränkung sein: siehe z.B. https://lkml.org/lkml/2016/8/8/354 - es sieht so aus, als ob der Kernel die Dinge so abbildet, wie Sie es aus historischen Gründen nicht erwarten würden.

Es kann sich bald ändern, da der obige Patch gestern gesendet wurde.

0

Je nach Ihrer Version von gcc, könnte die -msecure-plt Flagge ignoriert werden, wenn alle Bibliotheken, die Sie nicht auch mit -msecure-plt (einschließlich glibc) kompiliert verbunden waren. Siehe this.