OTX su Mac OS Mavericks
OTX nota GUI per otool, ultimamente sembra fare il capriccioso e a crashare quando si cerca di disassemblare un eseguibile, in verità la “colpa” non è del piccolo tool ma di Apple che ha modificato con XCode 4 il percorso di alcuni eseguibili di utility, inglobando tutto all’interno della sandbox di XCode, così facendo quando OTX nella classe SysUtils.m precisamente nel metodo pathForTool: cerca di farsi ritornare il pathname dell’eseguibile otool si ottiene un bel crash, inoltre se scarichiamo l’ultima versione disponibile dal sito http://otx.osxninja.com questa sembra non essere stata compila per supportare la decompilazione dei sorgenti per processori a 64 bit (non ne sono sicuro).
Le soluzioni sono due:
1) Scarichiamo i sorgenti dal sito su descritto aggiorniamo nel PROJECTS la giusta SDK da utilizzare e modifichiamo il metodo pathForTool: nella classe SysUtils.m come segue (fonte http://mattprice.me/2012/otx-crashing-with-nsinvalidargumentexception/ ):
- (NSString*)pathForTool: (NSString*)toolName
{
NSString* relToolBase = [NSString pathWithComponents:
[NSArray arrayWithObjects: @"/", @"usr", @"bin", nil]];
NSString* relToolPath = [relToolBase stringByAppendingPathComponent: toolName];
NSString* selectToolPath = [relToolBase stringByAppendingPathComponent: @"xcode-select"];
NSTask* selectTask = [[[NSTask alloc] init] autorelease];
NSPipe* selectPipe = [NSPipe pipe];
NSArray* args = [NSArray arrayWithObject: @"-switch /Applications/Xcode.app/Contents/Developer"]; //mod per Xcode 4 e sup.
[selectTask setLaunchPath: selectToolPath];
[selectTask setArguments: args];
[selectTask setStandardInput: [NSPipe pipe]];
[selectTask setStandardOutput: selectPipe];
[selectTask launch];
[selectTask waitUntilExit];
int selectStatus = [selectTask terminationStatus];
if (selectStatus == -1)
return relToolPath;
NSData* selectData = [[selectPipe fileHandleForReading] availableData];
NSString* absToolPath = [[[NSString alloc] initWithBytes: [selectData bytes]
length: [selectData length]
encoding: NSUTF8StringEncoding] autorelease];
return [[absToolPath stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]]
stringByAppendingPathComponent: relToolPath];
}
@end
2) Soluzione più semplice, scarichiamo da questa pagina Otx Mavericks, la versione sistemata da me.