Pregunta

Hay una elfutils paquete de software que incluye un programa llamado eu-elflint para comprobar binarios ELF (al igual que lint para C - de ahí el nombre).

Sólo por curiosidad, he comprobado nuestras propias bibliotecas compartidas con esta herramienta y se encontró una gran cantidad de temas, por ejemplo:.

eu-elflint libUtils.so

section [ 2] '.dynsym': _DYNAMIC symbol size 0 does not match dynamic segment size 248
section [ 2] '.dynsym': _GLOBAL_OFFSET_TABLE_ symbol size 0 does not match .got.plt     section size 3076
section [ 8] '.rel.plt': relocation 0: offset out of bounds
section [ 8] '.rel.plt': relocation 1: offset out of bounds
...
section [ 8] '.rel.plt': relocation 765: offset out of bounds

Como verificación cruzada Tengo construir una biblioteca compartida muy trivial a partir del código fuente a continuación

int foo(int a) {
   return a + 1;
}

// gcc -shared -fPIC -o libfoo.so foo.c

Y lo intentó de nuevo ...

eu-elflint libfoo.so

section [ 9] '.rel.plt': relocation 0: offset out of bounds
section [ 9] '.rel.plt': relocation 1: offset out of bounds
section [23] '.comment' has wrong flags: expected none, is MERGE|STRINGS
section [25] '.symtab': _GLOBAL_OFFSET_TABLE_ symbol size 0 does not match .got.plt section size 20
section [25] '.symtab': _DYNAMIC symbol size 0 does not match dynamic segment size 200

Como se puede ver incluso el ejemplo trivial también muestra una gran cantidad de problemas.

Por cierto: estoy en Ubuntu-Kármico-32 bits con gcc v4.4.1

Por cierto: ... lo mismo sucede en Debian Lenny-64 bits con gcc v4.2.4

Es esto algo que debería estar preocupado?

¿Fue útil?

Solución

Respuesta rápida: "¿Es esto algo que debería estar preocupado?" No .

Respuesta larga: cheques elflint no sólo las normas ABI, pero también algunas convenciones ELF. Ambas convenciones Abis y ELF cambiar con el tiempo: ABIs están extendidos, y tienen que seguir siendo compatible con versiones anteriores y convenciones ELF evolucionan con el tiempo (para obtener nuevas funciones, principalmente). Como consecuencia, las expectativas de elflint tienen que mantenerse en sintonía con lo que su ensamblador / enlazador (binutils de GNU en este caso) los productos. Usted puede encontrar gran cantidad de informes a elflint de nuevas extensiones ELF introducidas en GNU binutils, y para el que sólo se capta elflint más adelante. Por lo tanto, es más probable que usted tiene una versión de elflint que es demasiado viejo para binutils instalados. Como elflint no se utiliza mucho, no me sorprendería que una distribución Linux no impide que esos dos en sincronía tan bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top