On 01/09/2011, at 20:17, [email protected] wrote:
> From: Martin Wierschin <[email protected]>
> Date: 1 de setembro de 2011 19:11:24 BRT
> To: Dave DeLong <[email protected]>
> Cc: Cocoa Dev List <[email protected]>
>
> Offhand does anyone know how to inspect the architecture(s) of a plain
> executable file? I've been googling for a little bit and haven't hit upon
> anything that works yet.
Sure, that's easy to do. Define a C function like this:
#include <mach-o/fat.h>
char* FindMachoHeader(char* input, cpu_type_t cpu) {
struct fat_header* header = (struct fat_header*)input;
if (OSSwapBigToHostInt32(header->magic)==FAT_MAGIC) {
struct fat_arch* arch = (struct fat_arch*)(input+sizeof(struct
fat_header));
for (NSUInteger
i=0;i<OSSwapBigToHostInt32(header->nfat_arch);i++) {
if (OSSwapBigToHostInt32(arch[i].cputype)==cpu) {
return
input+OSSwapBigToHostInt32(arch[i].offset);
}
}
} else if (OSSwapBigToHostInt32(((struct
fat_arch*)input)->cputype)==cpu) {
return input;
}
return NULL;
}
Then get the executable file with something like:
NSData* executable = [NSData
dataWithContentsOfMappedFile:pathToExecutableFile];
and call the function like
if (FindMachoHeader([executable bytes],CPU_TYPE_X86)) { // or
CPU_TYPE_POWERPC if applicable
// if it returns non-null that architecture is present
}
(Disclaimer: partially written in Mail, proper consistency checking and so
forth must be added)
HTH,
--
Rainer Brockerhoff <[email protected]>
Belo Horizonte, Brazil
"In the affairs of others even fools are wise
In their own business even sages err."
Weblog: http://www.brockerhoff.net/blog
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]