L
Landon Fuller
landonf.bikemonkey.org · Personal blog · on HN since 2008
Landon Fuller writes technical posts on Mac OS X and iOS internals, security issues, crash reporting and Java on macOS.
What HN saysHN commenters cite it for explanations of macOS behavior such as PT_DENY_ATTACH, the Java vulnerabilities and Objective-C runtime details.
22HN people shared it
16linked it in comments
8stories submitted
115story points
7 years agolast shared
2008people per year2026
Most-shared posts
- 1Soylatte5 people · first shared 2010
- 2Reliable iOS crash reporting3 people · 3 points · first shared 2011 · discussion on HN
- 3iOS Static Libraries Are, Like, Really Bad2 people · 95 points · first shared 2014 · 74 comments on HN
- 4Reliable Crash Reporting (2013)2 people · 8 points · first shared 2013 · discussion on HN
- 5Index2 people · first shared 2013
- 6Leopard PT DENY ATTACH.200801222 people · first shared 2011
- 7Critical Mac OS X Java Vulnerabilities1 people · 4 points · first shared 2009 · discussion on HN
- 8Mac OS X 10.4 under VMware Fusion on Modern CPUs1 people · 2 points · first shared 2014 · discussion on HN
- 9The DNS Dead Drop1 people · 2 points · first shared 2008 · discussion on HN
- 10Function patching on iOS via libevil1 people · 1 points · first shared 2013 · discussion on HN
- 1105 191 people · first shared 2009
- 12Imp implementationWithBlock.201104131 people · first shared 2019
- 13Homepage1 people · first shared 2012
What HN people wrote when they linked it
JagMicker · 2012-12-16
http://cryptome.org
http://publicintelligence.net
http://landonf.bikemonkey.org
jrockway · 2011-09-10
No, it's an OS X "feature". PT_DENY_ATTACH:
http://landonf.bikemonkey.org/code/macosx/Leopard_PT_DENY_ATTACH.20080…
"UNIX with a GUI" at its best.
ankhmoop · 2009-05-22
It looks great, but unfortunately, the plugin is Windows only (and I'd never install a random plugin anyway), and the Java-based demo won't work either since I just turned Java off (http://landonf.bikemonkey.org/code/macosx/CVE-2008-5353.20090519.html)
flatline3 · 2012-06-30
> For Git, I just followed some examples I found online. I don't remember the exact procedure, but it didn't work. After around an hour of trying I just gave up. In fact, I found it just as difficult as trying to install Git on the OpenSolaris servers, which is saying quite a bit.
I installed git on a coworker's computer in a couple minutes today, so I don't know what to say.
> As for Java, I couldn't update despite using the Software Update menu. It worked on Windows, but OS X just hadn't gotten around to adding it. And, as is usually the case with Apple, there was no good way around it: since Apple hadn't update Java, I couldn't just install it myself. (Or, at least, there was no obvious way of doing this.)
It wasn't that Apple hadn't "added" it, there simply wasn't a port of that version of Java to Mac OS X, because they needed to port it. If someone external to Apple had produced a port (like, say, Sun), you could have installed it, exactly in the same way that we install Oracle Java today.
Someone did eventually produce a partial non-GUI port, and it later became the base of Oracle's officially supported Mac OS X Java: http://landonf.bikemonkey.org/static/soylatte/
This has little to do with Mac OS X being somehow broken, and a lot to do with the fact that Sun only provided Java binaries for Solaris, Linux and Windows.
For Java 7 on, Oracle will be supporting Java for Mac OS X directly.
> I don't know exactly what my friend tried to install AucTeX and the rest…
saagarjha · 2019-11-17
This sounds a lot like how imp_implementationWithBlock from the Objective-C runtime works, because it needs to run on iOS where executable stack is a big no-no: http://landonf.bikemonkey.org/code/objc/imp_implementationWithBlock.20…
mikerhodes · 2014-02-19
As long as you also pull in the dependencies specified in the podfile, you'll be absolutely fine just adding the class files to the project. I've tried to be careful to maintain that as a viable option. That you retain the option is one of the strengths of Cocoapods to my mind.
While far from perfect, I chose to use Cocoapods as it's becoming the defacto standard in the iOS community. I've used it in my apps, and have found it easier to manage my deps than a bunch of git submodules or copying source code into my projects.
The problems with static libraries on iOS have been well documented at [1]. Essentially, that you can't build static libraries as a third-party for iOS without resorting to low-level trickery. This seemed like it would become a maintenance burden vs. the Cocoapods approach.
[1]: http://landonf.bikemonkey.org/code/ios/Radar_15800975_iOS_Frameworks.2…
saurik · 2013-10-02
iOS actually doesn't have a restriction as strict as this: you can take a page of memory and map it again without issue. This is the technique used by imp_implementationWithBlock, and current versions of libffi can generate closures based on the technique.
http://landonf.bikemonkey.org/2011/04/index.html
pbsdp · 2013-07-15
You're assuming writable trampolines. objc_msgSend()'s trampoline works by caching the target lookup and having an extremely short fast-path in the case that the target method implementation is cached.
objc_msgSend is a trampoline in the sense that it leaves the frame/registers untouched and jumps straight to the target implementation.
That said, you can implement the kinds of trampolines you're referring to without writable code pages, it just requires more work: http://landonf.bikemonkey.org/2011/04/index.html
lordgilman · 2013-05-30
I think this is the story that the parent was referencing. Here's the story from 2005 and a kernel module loadable at runtime that gets around the problem.
https://blogs.oracle.com/ahl/entry/mac_os_x_and_the
http://landonf.bikemonkey.org/code/macosx/Leopard_PT_DENY_ATTACH.20080…
nupark2 · 2011-10-13
Actually, getting the backtrace sounds like a pretty difficult part:
http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110…
therealkerni · 2011-09-23
Hey, I am Andreas, one of the developers of HockeyApp.net. The service provides some pretty unique features especially advanced crash report management. Crash Reporting is based on PLCrashReporter (see http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110… works also in the App Store with full server side symbolication grouping all crashes by class, method and line number.
Let me know if you have any questions.
clinton · 2010-12-01
Sounds like a riff on the SoyLatte project http://landonf.bikemonkey.org/static/soylatte/ Although, it does appear to come with a nice OSX installer... The real leap forward will need all Apple's soon-to-be-opened-sourced bindings.
sfraser · 2010-10-22
You would still be able to run the Open JDK. There is a port for the Mac, but if I am not mistaken it uses the X Server and is not as well integrated with the graphics layer of OS X desktop. Example: http://landonf.bikemonkey.org/static/soylatte/
masklinn · 2010-10-21
On the other hand, is there really any other? For years, Apple has been pretty much the sole provider, and had their very own JVM with specific look & feel customization to the UI packages. The only real alternative is Soylatte[0], which is fairly purpose-specific.
[0] http://landonf.bikemonkey.org/static/soylatte/
lapusta · 2010-10-21
There is already a port of OpenJDK: http://landonf.bikemonkey.org/static/soylatte/
Though it's not developed by Oracle employees afaik.
chaosmachine · 2009-05-27
Proof of concept: http://landonf.bikemonkey.org/2009/05/19#CVE-2008-5353.20090519
It definitely works. I just disabled the Java plugin in Firefox.