有没有办法在已链接的可执行文件中添加部分?
我正在尝试根据Apple指令对OS X可执行文件进行代码签名.这些包括通过向链接器选项添加参数来在要签名的二进制文件中创建合适部分的指令:
-sectcreate __TEXT __info_plist Info.plist_path
Run Code Online (Sandbox Code Playgroud)
但是:我正在尝试签名的可执行文件是使用Racket(一种Scheme实现)生成的,它通过克隆"真正的"球拍可执行文件并直接编辑Mach-O文件,从Racket/scheme代码组装一个独立的可执行文件.
所以问题是:有没有办法可以进一步编辑这个可执行文件,添加代码签名所需的部分?
使用ld时以明显的方式使用不起作用:
% ld -arch i386 -sectcreate __TEXT __info_plist ./hello.txt racket-executable
ld: in racket-executable, can't link with a main executable
%
Run Code Online (Sandbox Code Playgroud)
我认为这看起来很公平.Libtool没有任何可能看起来的选项,也没有redo_prebinding命令(至少是编辑可执行文件的命令).
相关的球拍列表建议的两种可能性是(i)扩展球拍编译工具以调整在可执行文件上完成的手术(可行但可怕),或(ii)创建具有以下功能的自定义球拍可执行文件.期望的部分已经到位.两者看起来像是大锤和坚果的解决方案.该macosx-dev清单没有提出任何建议.
我想实现 XCTest 单元测试,但实际上并不想使用 XCode 来实现。目前尚不清楚如何做到这一点,我想知道这是否可能?
\n\n从我到目前为止所发现的情况来看,人们可能会觉得 XCTest 完全依赖于 XCode。我已经找到了xcodebuild test命令行支持,但这取决于是否找到 XCode 项目或工作区。
我在这里有什么选择,或者我只是撕掉现有的SenTestingKit代码并恢复为一些自制的单元测试代码?我手头有一些这样的代码,但这不是正确的做法。
理由/历史:
\n\n这不仅仅是我老了。我有一个 Objective-C 程序,我上次接触它是在两年前,我为它开发了一套基于SenTestingKit. 现在我回到这段代码 \xe2\x80\x93 我可能至少必须重建这个东西,因为干预库更改 \xe2\x80\x93 我发现SenTestingKit已经消失了,被 XCTest 取代。那好吧....
该代码不是使用 XCode 开发的,因此没有与之.project关联的文件,并且到目前为止,测试已使用 SenTestingKit\ 的主程序和 Makefile 顺利管理check目标(部分是 old-skool再说一次,部分原因是对 IDE 缺乏兴趣,部分原因是这是对 Objective-C 的实验,所以最初坚持我所知道的)。
我通常启动长时间运行的 shell 脚本的方式是
\n\n% (nohup ./script.sh </dev/null >script.log 2>&1 & )\nRun Code Online (Sandbox Code Playgroud)\n\n重定向关闭stdin,然后重新stdout打开stderr;nohup当所属进程退出时,停止 HUP 到达该进程(我意识到这有点2>&1多余,因为nohup无论如何它都会做类似的事情);子 shell 中的后台是双叉,这意味着./script.sh进程的父进程在仍在运行时已退出,因此它获取 init 进程作为其父进程。
然而,这并不完全有效,因为当我退出调用它的 shell 时(当然,通常我是在远程计算机上执行此操作),它不会完全退出。我可以^C退出,这是可以的 \xe2\x80\x93 该进程确实按预期在后台进行。然而,我无法弄清楚需要/不发生什么^C,这让我很恼火。
上面的操作似乎勾选了unix FAQ(问题 1.7)中的大部分框,除了我没有做任何事情来将该进程与控制终端分离,或者使其成为会话领导者。FreeBSD 上存在setsid(2) 调用,但不存在该setsid命令;据我所知,也没有明显的替代命令。当然,在 macOS 上也是如此。
所以,问题是:
\n\nsetsid这个平台上是否有我失踪的不同名称的呼叫者?^C?有什么办法可以咬我吗?我正在使用C语言创建ASN.1解析器(使用Ericsson ASN1规范文档).我想解码UTF-8字符串类型,但我无法在线找到有关此信息,我正在使用的文档没有详细描述UTF-8字符串.任何人都可以为我提供一些代码,或解释如何解码它.
我是ASN.1的新手.