2010-08-13 7 views
18

Me gustaría cambiar el nombre de los símbolos dentro de los archivos del objeto (.o) con algo que sería el equivalente Mac de la herramienta binutils 'objcopy --redefine-syms.¿Un equivalente objcopy para Mac/iPhone?

No encontré arm-apple-darwin10-objcopy. Probé el puerto arm-elf-binutils de MacPorts y también intenté jugar un poco con otool y segedit sin mucho éxito.

¿Alguna idea por favor?

+0

¿Estás de acuerdo con la definición de alias, lo que significa que los símbolos más antiguos todavía existirán? –

+0

¿qué tal 'brew install binutils' y' gobjcopy'? por ejemplo: 'gobjcopy --redefine-sym _D4main9foo_test1FZv = _foobar main.o main2.o'; NOTA: el ejecutable resultante parece incorrecto, pero 'nm main2.o | grep _foobar' funciona – timotheecour

Respuesta

3

Suena como un trabajo para objconv de Agner Fog

objconv announcement

Ahora he terminado de hacer soporte completo para archivos de Mach-O en el convertidor de archivos objeto mencionados en mis mensajes anteriores. Puede usarlo como un reemplazo para la utilidad objcopy que falta.

Objconv se puede utilizar para los propósitos siguientes: Convertir archivos de objetos y archivos biblioteca/Archivo de entre Mach-O, ELF, COFF y formatos OMF para todos x 86 y plataformas x86-64. Cambie el símbolo nombres en archivos de objeto, haga símbolos débiles, agregue nombres de alias a símbolos.
Generar, modificar y convertir archivos de biblioteca estática (* .a, * .lib) a través de plataformas (Mac, Linux, BSD, Windows)
ficheros objeto de vaciado y archivos ejecutables archivos objeto de desmontar y archivos ejecutables. Muy bueno desensamblador. Se puede descargar desde www.agner.org/optimize/. El código fuente está disponible bajo GPL. Avíseme si quiere probarlo. ¡Que te diviertas!

objconv manual

objconv.zip - source

+0

de la pregunta frecuente: "11.3 ¿Es posible convertir archivos para ARM? No. Mucha gente ha preguntado acerca de esto, por lo que obviamente existe la necesidad de tal herramienta, pero I no voy a hacer Objconv solo admite archivos para las arquitecturas x86 y x86-64. Necesitará una reescritura importante de objconv para convertir los archivos ARM en . " –

1

objconv no funciona actualmente para ARM, por lo que esta opción no está disponible para iPhone. No debería ser un problema usar objconv de elf a mach-o para mac osx x86/x64. Quiero saber si has encontrado una solución para ARM

2

Sé que estoy resucitar este puesto de entre los muertos, pero ...

tengo una repentina necesidad de hacerlo así, y descubrir que doesn objcopy No funcionó en OSX fue un poco un shock. Pero yo creo es posible utilizar ld para lograr el mismo efecto:

ld -r input.o -o output.o -alias oldsymbol newsymbol -unexported_symbol oldsymbol 

Esta realidad sólo crea un alias para el símbolo bajo un nuevo nombre y esconde la antigua.

No he tenido la oportunidad de hacer muchas pruebas todavía, pero mirando el archivo de salida con nm muestra que parece estar haciendo lo correcto.

+0

Este comando elimina todos los símbolos de depuración. ¿Sabes cómo copiarlos del archivo objeto original? – Dmitry

+1

'objcopy' puede cambiar el nombre de los símbolos T (símbolo de sección de texto) y U (indefinido). Sin embargo, su solución 'ld' solo puede manejar la primera. –

Cuestiones relacionadas