5 ms·
Function hooking in Swift
- thinkpad20 12y agoVery interesting write-up, thanks! Makes me want to get back into C programming :) How did you manage to learn all of this stuff, for a new, closed-source and relatively undocumented (e.g. @asmname) language?
- ololoev 12y agoIt's all about reverse-engineering stuff; my usual workflow looks like: (1) Complile some Swift program & look at the disasembler listing of it (I use IDA and — for Objective-C — Hopper Disassembler); (2) Do some changes in source code in the program, compile it again, and see diffs in disassembler listing; that way I can see what is changed and how. About the @asmname thing: you can easily dump every default Swift module using a REPL command: repl> :print_module Swift There you can find a lot of interesting language lexems and more, so all you have to do is to try using them in your code until you don't figure it out ;)
- milkofthesun 12y agoBoo. Hoo.
- zw 12y agoThe "function trampoline" that's described looks more or less like the Block ABI. Some good learning is available in the source for `libclosure`, [Language Specification for Blocks](http://www.opensource.apple.com/source/libclosure/libclosure-63/BlockSpec.rtf http://www.opensource.apple.com/source/libclosure/libclosure...) and [Block Implementation Specification](http://www.opensource.apple.com/source/libclosure/libclosure-63/BlockImplementation.txt http://www.opensource.apple.com/source/libclosure/libclosure...). ---- Consistently being able to hook functions in Swift is going to be a pain in release mode optimizations, as the Swift compiler does aggressive inlining.
- collyw 12y agoI know its a new language, but does every blog post about Swift now need to show up on HN front page? I thought it was bad for "anything JS related" posts here.
- bthdonohue 12y agoconst char type:1; // I'm not sure about this and padding, char padding[7]; // maybe it's just a uint64_t too... This is for struct alignment to address boundaries. It's fairly typical C and results in some performance optimizations.
- blarney_stone 12y agoI've seen this concern that there are no function pointers in swift, and it seems to come from a misunderstanding on what it means for functions to be first class. From https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ https://developer.apple.com/library/prerelease/ios/documenta... : You use function types just like any other types in Swift. For example, you can define a constant or variable to be of a function type and assign an appropriate function to that variable: var mathFunction: (Int, Int) -> Int = addTwoInts mathFunction can now be passed around, fed in as a parameter in another function, etc. mathFunction is for all purposes a function pointer.
- ololoev 12y agoWell, there isn't any C-style function pointer (means you can not get it's raw address in memory to do something with it), but yeah — you can pass functions as arguments.