Red de conocimiento informático - Aprendizaje de código fuente - Recientemente, he estado buscando cómo ofuscar archivos DLL de Android en Mac, pero hasta ahora no he encontrado un método adecuado.

Recientemente, he estado buscando cómo ofuscar archivos DLL de Android en Mac, pero hasta ahora no he encontrado un método adecuado.

Cree una biblioteca de enlaces dinámicos:

1. Genere archivos de módulo, también conocidos como archivos .o. Esto no es diferente al Linux normal.

cc -c a.c b.c y luego obtenga a.o y b.o

2, use ld para fusionar los archivos .o

ld -r -o c.o a.o b.o Esto no es nada especial.

3. Utilice libtool para crear una biblioteca de enlaces dinámicos.

libtool -dynamic -o c.dylib a.o b.o (también puedes usar libtool -static -o c.a a.o b.o aquí para crear una biblioteca estática)

Si usas gcc para compilar directamente, Linux generalmente es Sí:

gcc -shared -o c.so a.c b.c

En Mac OS X, necesita:

gcc -dynamiclib - o c.dylib a.c b.c

Aquí es donde suelen surgir problemas al migrar programas Unix a Mac OS X. Si utiliza herramientas como autoconf/automake, las posibilidades de errores se reducen.

Acceda a la biblioteca de enlaces dinámicos:

1.nm es el más utilizado, su uso es similar a Linux

nm c.dylib puede ver el símbolo exportado. mesa, etc.

2. Otra herramienta comúnmente utilizada es otool, que es exclusiva de Mac OS X. Por ejemplo, desea ver las dependencias de c.dylib

otool -L c.dylib

Comprender el marco:

El marco es una parte importante de Mac OS X, también puedes echar un vistazo a la gran cantidad de Frameworks en /System/Library/Frameworks/. Framework es una evolución adicional de dylib. Integra archivos de encabezado, documentos, bibliotecas de enlaces dinámicos, etc. en un directorio orgánico, similar a un método de autodescripción, y este método se puede ver en todas partes en Mac OS X. Por ejemplo, una aplicación es generalmente un directorio, por ejemplo, la aplicación correspondiente al directorio /Applications/iTunes.app es iTunes. Al hacer doble clic en este directorio, se iniciará la ejecución. Esto es muy diferente del enfoque único exe/dll de Windows.

La herramienta de creación de framework también es libtool; consulte man para obtener más detalles.

//////////////////////////////////////////// // ///////////////////////////////////////// /////// //// ///////////////////////////

A continuación se explica cómo desarrollar el programa Cocoa más simple. El programa es realmente simple porque si usas Xcode, no deberías tener que escribir ningún código si eliges la herramienta de comando Cocoa Foundation.

Pero lo que quiero presentarles aquí es cómo este programa más simple se compila con éxito a través de gcc. Por supuesto, hay algo que se puede explicar. h>

int main(int argc, char* argv[])

{

NSLog(@"Hola Cocoa desde la consola");

return 0;

}

El código es muy simple, puedes usar cualquier editor de texto que desees para completarlo, el nombre del archivo fuente es hello.m, es así de simple Es demasiado lujoso usar xcode para el programa.

Bien, aquí se explica cómo compilar el programa. Abra la terminal, vaya al directorio donde se encuentra el archivo fuente y luego ejecute el siguiente comando para generar un programa llamado hola.

gcc -framework Foundation hello.m -o hello

El parámetro -framework debe explicarse aquí. Si está familiarizado con gcc, sabrá que el parámetro -l en realidad se pasa al comando ld utilizado por el vinculador, y que los parámetros -framework y -l se pasan al comando ld. Las funciones del marco y los parámetros -l son las mismas, es decir, decirle a ld a qué marco debe vincularse el archivo de destino compilado al generar el archivo ejecutable final. Debido a que Mac Core Darwin también es Unix, el parámetro -l también lo es. compatible con mac.

Además, gcc también puede aceptar -L para especificar la ubicación de la biblioteca a vincular, que generalmente se usa para vincular a bibliotecas de terceros, entonces, ¿qué debo hacer si quiero vincular? a un marco de terceros? L /your/Framework? No, en este caso gcc usa un parámetro diferente -F, por lo que si desea vincularse a un framework de terceros, como /opt/Qt4/QtCore, debe usar gcc de esta manera.

gcc -F/opt/Qt4 -framework QtCore qttest.cpp -o qttest

Bien, continuemos discutiendo otro problema en el programa anterior, ¿por qué hay más al frente? de la cadena? ¿Un símbolo @? Este asunto debe haber preocupado a muchas personas. En obj-c, el compilador convertirá el modo @"string" para generar una instancia de puntero NSString durante la compilación. Por lo tanto, cuando se requiere un puntero NSString como parámetro, si no lo hace. Si desea construir explícitamente un puntero NSString, entonces es más fácil usar este método, pero si toma @"cadena" como parámetro, entonces es más fácil usar este método, pero si no desea construir un puntero NSString, entonces use este método para crear un puntero NSString, luego use este método, luego use este método, luego use este método. Pero si usa el patrón @"String" donde se espera una cadena c, obtendrá un error.

Nota:

Dado que obj-c usa operaciones de puntero, si se representa mediante "cadena", el compilador obviamente no sabe dónde colocar la dirección de "cadena". Agregar delante de @"cadena" básicamente significa crear una nueva NSString llamada "cadena" y devolver la dirección de esa NSString.

Entonces

NSLog("Hello Cocoa From Console");

Esto está mal,

NSLog(@"Hello Cocoa From Consola");

Esto es correcto.