Solaris(64 位)开发者指南

/usr/lib/isaexec 二进制文件

isaexec(3C) 是一个 32 位可执行二进制文件,它执行上面刚介绍的 shell 脚本包装中概述的包装函数,但是具有准确完整的参数列表。该可执行文件的全路径名是 /usr/lib/isaexec,但是在执行时并不使用该名称,而是将该名称复制或链接(硬链接而不是软链接)到存在多个版本的程序的主名称,这些版本是通过 isalist(1) 进行选择的。

例如,在 SPARC 环境中,truss(1) 命令作为以下三个可执行文件存在:

/usr/bin/truss

/usr/bin/sparcv7/truss

/usr/bin/sparcv9/truss

sparcv7sparcv9 子目录中的可执行文件分别是实际的 32 位和 64 位 truss(1) 可执行文件。包装文件 /usr/bin/truss 是指向 /usr/lib/isaexec 的硬链接。

在 x86 环境中,truss(1) 命令作为以下三个可执行文件存在:

/usr/bin/truss

/usr/bin/i86/truss

/usr/bin/amd64/truss

isaexec(3C) 包装使用 getexecname(3C) 来确定它自己的经过完全解析的无符号链接路径名(与其 argv[0] 参数无关),sysinfo(SI_ISALIST, ...) 获取 isalist(1),并针对第一个可执行文件执行 exec(2),第一个可执行文件的名称可在为其所在的目录生成的子目录列表中找到。然后,该包装会按原样传递参数向量和环境向量。这样,传递给最后一个程序映像的 argv[0] 将显示为所指定的第一个参数,而不是转换成经修改以包含子目录名称的全路径名。


注 –

因为可能存在包装,所以在将可执行文件移到其他位置时,需要格外小心。您可能会移动包装而不是实际程序。