Test suite for weak symbols in ELF targets

Hi malware fighters,

Here is a nice test suite for weak symbols in ELF targets, everyone knows the consequences of weak cgi (old targeting method but still dangerously exploitable).

set testname “weak symbols”

-# This test only works for ELF targets. It ought to work for some
-# a.out targets, but it doesn’t.
-if ![is_elf_format] {
+# This test only works for ELF targets.
+# It ought to work for some a.out targets, but it doesn’t.
+if {! [is_elf_format] && ! [is_pecoff_format]} {

  • unsupported $testname
    return
    }

+# Weak symbols are broken for non-i386 PE targets.
+if {! [istarget i?86--]} {

  • setup_xfail --pe*
    +}

if {! [ld_assemble $as $srcdir/$subdir/weak1.s tmpdir/weak1.o]
|| ! [ld_assemble $as $srcdir/$subdir/weak2.s tmpdir/weak2.o]} then {

+# is_pecoff_format
+# true if the object format is known to be PECOFF
+#
+proc is_pecoff_format {} {

  • if { ![istarget --mingw32*] \
  • && ![istarget --cygwin*] \
  • && ![istarget --pe*] } {
  • return 0
  • }
  • return 1
    +}

+#

simple_diff

compares two files line-by-line

returns differences if exist

@@ -29,15 +29,23 @@
&& ![istarget --linux*]
&& ![istarget --irix5*]
&& ![istarget --irix6*] \

  • && ![is_pecoff_format] \
    && ![istarget *-*-solaris2*] } then {
    
  • unsupported $testname
    return
    }

if { [istarget --linuxaout]
|| [istarget --linuxoldld] } {

  • unsupported $testname
    return
    }

+# Weak symbols are broken for non-i386 PE targets.
+if {! [istarget i?86--]} {

  • setup_xfail --pe*
    +}

if {! [ld_assemble $as $srcdir/$subdir/weak-undef.s tmpdir/weak-undef.o]} then {
# It’s OK if .weak doesn’t work on this target.
unresolved $testname

Impliment, and enjoy,

polonus