2

While decompiling an iOS app, all function names and object names are visible. Why ?

My guess is that during the build, function names are kept by the compilator to allow the linker to do its job. But then once the linker has finished, why not removing the function names ?

1

Short answer: noone bothered to implement something like this. /bin/strip was developed when memory was a precious resource and it increased the challenge of debugging.

My best guess why: In ObjectiveC (and swift) functions are called by objects sending messages to each other in a kind of dynamic dispatch.

That means when you call a method on an object, you send identifiers of the object you want to call the method on and the method itself to the dispatch function (e.g. objc_msgsend). My best guess is that stripping symbols complicates that process.

References: https://blog.zynamics.com/2010/04/27/objective-c-reversing-i/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.