我需要插入(调用我的函数而不是原始函数)一些OS X系统调用来克服一个闭源软件中的缺陷.
最好,得到的解决方案可以在10.5(Leopard)和更新的情况下工作,但如果论证足够强大,我可能需要10.6(Snow Leopard).
最好,得到的解决方案是可执行的,但我可能会选择一个脚本.
优选地,即使在目标应用程序运行之后,所得到的解决方案也能够插入("窃取向量"),但是我可以解决在应用程序加载时必须注入其自身的技术.
优选地,所得到的解决方案将用C或C++开发,但我可以解决Objective-C或其他问题.
到目前为止,我已经尝试过:
1)DTrace脚本,它教会了我很多,但D语言的局限性(有限的流量控制等)使它成为我正在做的事情的主要痛苦,更不用说结果将是一个脚本,这不像我正在拍摄的那样整洁和自足.
2)DYLD_INSERT_LIBRARIES插入,在很多方面很流行,但可能是由于命名空间扁平化(我不会假装深刻理解这意味着什么),它可以很好地对付更简单的可执行文件,但是使我的目标应用程序阻塞,即使我构建一个没有实际插入任何调用的无用库.
我的最新想法是尝试使用mach_star(https://github.com/rentzsch/mach_star),但我先停在这里,要求Stack Overflow社区,它总是比我更了解...
......我接下来除了马赫星之外还应该看一些东西吗?
macos dtrace library-interposition function-interposition interposing
目标:
在共享Apache 2.2机器上的虚拟服务器中,我尝试配置.htaccess为无缝地表示文件夹子文件夹中的public_html文件,就像它们位于根目录中一样.
也就是说,当用户访问时http://www.example.com/home,我需要他或她无缝地(不在客户端浏览器中重写URL)从中查看文件http://www.example.com/subfolder/home.
我的.htaccess文件看起来像这样:
RewriteEngine on
RewriteRule !^subfolder/ subfolder%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
问题:
这有效,但它会在客户端浏览器中重写URL.
也就是说,用户http://www.example.com/subfolder/home/在他们的地址栏中看到了,但我需要他们才能看到http://www.example.com/home
我的理解是,我所做的事情.htaccess应该导致最终用户看不到的"内部"重写,但看起来我正在进行"外部"重写.
我究竟做错了什么?
[编辑]其他细节:
当用户访问www.example.com,它确实如需要,用户可以看到主页内容从担任了工作public_html/subfolder/default.html,并在浏览器地址栏中说www.example.com.
但是,当用户单击该主页上的"联系人"链接(已编码href="/contact")时,它会到达,但会www.example.com/subfolder/contact/在浏览器地址栏中显示,就好像它已完成重定向而不是内部重写.
如果我然后删除/subfolder地址栏中的文本并强制重新加载页面,它可以工作 - 它加载正确的内容,地址栏仍然www.example.com/contact/
实施说明:如果有帮助,public_html/subfolder/contact是包含文件的文件夹default.html.
另一个观察:
如果我打开一个新选项卡并键入www.example.com/contact/ (注意尾部斜杠),它将按预期和期望工作.
但是如果我打开一个新选项卡并键入www.example.com/contact (没有尾部斜杠),它会重定向到www.example.com/subfolder/contact/,这是我不想要的.
我觉得应该告诉我什么是错的,但答案仍然没有找到我.