OTX su Mac OS Mavericks




Pasted Graphic

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.