hook C函数
先拿一个简单的c函数getenv上手。这个函数接受一个char *类型的参数(得是null terminated string)并返回对应的环境变量。
实际上在你的可执行文件启动时这个函数会被多次调用的。
用Xcode打开Watermark项目。创建一个symbolic breakpoint到getenv,并添加action:
po (char *)$rdi
并勾选Automatically continue after evaluating actions。
getenv断点.png
构建并运行app在模拟器上,你可以得到类似这样的输出:
"DYLD_INSERT_LIBRARIES"
"NSZombiesEnabled"
"OBJC_DEBUG_POOL_ALLOCATION"
"MallocStackLogging"
"MallocStackLoggingNoCompact"
"OBJC_DEBUG_MISSING_POOLS"
"LIBDISPATCH_DEBUG_QUEUE_INVERSIONS"
"LIBDISPATCH_CONTINUATION_ALLOCATOR"
... etc ...
(注意,更优雅的打印app的所有环境变量的方式是使用DYLD_PRINT_ENV。在Product\Manage Scheme中添加这个到Environment variables里面去。可以简单