2011-05-05 24 views

Respuesta

7

No estoy seguro de qué tan portátil es esto, pero para x86 y x86_64, formato ELF, puede usar readelf -r y ver los tipos de reubicación.

Para el código de 32 bits PIC, usted debe tener una sección de reubicación R_386_GOTPC:

Relocation section '.rel.text' at offset 0x38c contains 3 entries: 
Offset  Info Type   Sym.Value Sym. Name 
00000004 00000902 R_386_PC32  00000000 __i686.get_pc_thunk.cx 
0000000a 00000a0a R_386_GOTPC  00000000 _GLOBAL_OFFSET_TABLE_ 
00000010 00000803 R_386_GOT32  00000000 f 

No existe tal sección sección debe existe para los no-PIC .o s. (También verá una tabla de compensación global en la salida readelf -s).

Para 64 bits, lo mismo pero con un tipo de reubicación R_X86_64_GOTPCREL. Estoy bastante seguro de que todos los nombres de tipo de reubicación son directamente indicativos de si el código es PIC o no, pero no puedo encontrar una referencia en este momento.

+0

¿es 'readlef' o 'readelf'? – Raj

+0

error tipográfico, es 'readelf'. – Mat

Cuestiones relacionadas