ldedit 命令

用途

修改一个 XCOFF 可执行文件头。

语法

ldedit -b Option [ -V ] File

描述

可以使用 ldedit 命令修改 XCOFF 头中或可执行文件的辅助头中的各种字段。 ldedit 命令可以将应用程序标记或取消标记为‘大页数据’程序。 使用 "ldedit命令还可以添加或修改 MAXDATA 和 MAXSTACK 的值,而无需重新连接。

-b 标志的格式与链接编辑器 ld 命令使用的格式类似。 -b标记可以在命令行中多次使用。

如果没有指定标志,"ldedit命令将通过标准错误输出显示使用信息。

标志

表 1. 标志
描述
-b选项 修改由 Option 指定的可执行文件。 Option 的可能值是:
aslr或 "aslr[[+-][tdsmp]*]*
aslr或 "aslr[[+-][tdsmp]*]*指定程序的地址空间布局随机化。 如果只使用 "aslr选项,则会启用所有随机化属性。
如果 "aslr选项后有冒号,则可以启用单个属性。 正号 (+) 启用随机化,负号 (-) 关闭随机化。 以下属性可用于指定文本、数据、堆栈、mmap 和私有库:tdsmp。 对于未列出的属性,随机化设置仍处于禁用状态。
注: 不能为 32 位程序指定 mp 属性。
对某些程序进行了编译和链接,从而将可重定位的地址映射到文本部分中。 该选项要求在程序运行时重新定位地址。 如果对文本或数据启用了随机化,那么这些程序将失败。 因此,当存在文本段重置时,除非在使用 "aslr选项时明确指定td属性,否则不会启用文本和数据随机化。
noaslr
清除程序的随机化属性设置。
datapsize:psize
请求以字节为单位的psize数据页面大小。 该值可以指定为十进制、十六进制或八进制数。 数字规格与 C 编程语言相同。 此外,页面大小可以指定为一个数字,后跟一个单字符后缀:
  • k 或 K(表示 KB 或 0x400 字节)
  • m 或 M(表示 MB 或 0x100000 字节)
  • g 或 G(表示 GB 或 0x40000000 字节)
  • t 或 T(表示 TB 或 0x10000000000 字节)
  • p 或 P(表示 PB 或 0x4000000000000 字节)
  • x 或 X(表示 EB 或 0x1000000000000000 字节)
例如,"-b datapsize:16k或 "-b datapsize:0x4000请求0x4000数据,并在 "XCOFF报头中设置 "F_VARPG位。 具体方法是将辅助标头的相应成员设置为给定值psize 的对数基 2。 如果该值不同于 0,"XCOFF标头 "f_flags成员的 "F_VARPG位也会被设置。 否则,会清除该位。
forkpolicy:policy
如果文件是 64 位程序,则设置 XCOFF 辅助头中的 _AOUT_FORK_POLICY 标志。 如果策略cor,_AOUT_FORK_COW 也会被设置,从而要求使用写入时复制叉树策略。 如果策略为 "",_AOUT_FORK_COW 标志将被清除,从而要求使用 "引用复制 "叉树策略。 如果文件是 32 位程序,则不做任何更改。
noforkpolicy
如果文件是 64 位程序,则重置 XCOFF 辅助头中的 _AOUT_FORK_POLICY 和 _AOUT_FORK_COR 标志。 将使用缺省派生树策略,除非通过 VMM_CNTRL 环境变量指定一个派生树策略。 如果文件是 32 位程序,则不做任何更改。
llu
将可执行文件标记为支持在线库更新(LLU)。
诺卢
将可执行文件标记为不支持在线库更新(LLU)。
lpdata
将文件标记为大型页面数据可执行文件。
nolpdata
将文件取消标记为大型页面数据可执行文件。
noshrsymtab
清除 XCOFF 辅助头中的 _AOUT_SHR_SYMTAB 标志。 如果文件是 32 位对象,则不做任何更改。
M:<modtype>
更新文件中的模块类型字段和共享对象标志。 当模块类型以S字符开头且长度为 3 个字符时,XCOFF 标头中的 "F_SHROBJ标志将被设置。
maxdata:
设置 MAXDATA 值。 value0 开始时是八进制数,以 0x 开始时是十六进制数,以其他字符开始时是十进制数。
maxdata:值 "/dsa
设置 MAXDATA 值和 DSA 位。 value0 开始时是八进制数,以 0x 开始时是十六进制数,以其他字符开始时是十进制数。
 
maxstack:
设置 MAXSTACK 值。 value0 开始时是八进制数,以 0x 开始时是十六进制数,以其他字符开始时是十进制数。
norwexec
将文件的可写和可映射的部分和堆栈标记为不可执行。
shmpsize:psize
请求共享内存的psize页面大小(以字节为单位)。 指定的值必须是 2 的幂。 如果不是,数值会向下舍入到最接近的 2 的幂。 该值可以指定为十进制、十六进制或八进制数。 此外,页面大小可以指定为一个数字,后跟一个单字符后缀:
  • k 或 K(表示 KB 或 0x400 字节)
  • m 或 M(表示 MB 或 0x100000 字节)
  • g 或 G(表示 GB 或 0x40000000 字节)
  • t 或 T(表示 TB 或 0x10000000000 字节)
  • p 或 P(表示 PB 或 0x4000000000000 字节)
  • x 或 X(表示 EB 或 0x1000000000000000 字节)
例如,"-b shmpsize:64k或 "-b shmpsize:0x10000要求共享内存的页面大小为 64 KB。 如果指定值不为 0,则设置 "XCOFF标头的 f_flags 成员的 F_VARPG 位。 如果指定为 0,则清除 F_VARPG。 程序使用共享内存的默认页面大小。 如果文件是 32 位对象,则不做任何更改。
shrsymtab
在 XCOFF 辅助头中设置 _AOUT_SHR_SYMTAB 标志。 如果文件是 64 位程序,程序运行时会创建共享符号表。 如果Flag是 64 位对象,但不是 64 位程序,则可以设置 _AOUT_SHR_SYMTAB 标志,但在运行时无效。 如果文件是 32 位对象,则不做任何更改。
 
stackpsize:psize
请求进程主线程堆栈的psize页面大小(以字节为单位)。 该值可以指定为十进制、十六进制或八进制数。 数字规格与 C 编程语言相同。 此外,页面大小可以指定为一个数字,后跟一个单字符后缀:
  • k 或 K(表示 KB 或 0x400 字节)
  • m 或 M(表示 MB 或 0x100000 字节)
  • g 或 G(表示 GB 或 0x40000000 字节)
  • t 或 T(表示 TB 或 0x10000000000 字节)
  • p 或 P(表示 PB 或 0x4000000000000 字节)
  • x 或 X(表示 EB 或 0x1000000000000000 字节)
例如,"-b stackpsize:16k或 "-b stackpsize:0x4000请求0x4000用于处理主线程堆栈,并设置 "XCOFF头中的 "F_VARPG位。 具体方法是将辅助标头的相应成员设置为给定值psize 的对数基 2。 如果该值不同于 0,"XCOFF标头 "f_flags成员的 "F_VARPG位也会被设置。 否则,会清除该位。
textpsize:psize
请求psize文本页面大小(以字节为单位)。 该值可以指定为十进制、十六进制或八进制数。 数字规格与 C 编程语言相同。 此外,页面大小可以指定为一个数字,后跟一个单字符后缀:
  • k 或 K(表示 KB 或 0x400 字节)
  • m 或 M(表示 MB 或 0x100000 字节)
  • g 或 G(表示 GB 或 0x40000000 字节)
  • t 或 T(表示 TB 或 0x10000000000 字节)
  • p 或 P(表示 PB 或 0x4000000000000 字节)
  • x 或 X(表示 EB 或 0x1000000000000000 字节)
例如,"-b textpsize:16k或 "-b textpsize:0x4000请求0x4000作为文本,并在 "XCOFF标头中设置 "F_VARPG位。 具体方法是将辅助标头的相应成员设置为给定值psize 的对数基 2。 如果该值不同于 0,"XCOFF标头 "f_flags成员的 "F_VARPG位也会被设置。 否则,会清除该位。
-V 在标准错误输出上打印 ldedit 命令的版本。

示例

  1. 要请求系统选定的页面大小的文本、数据和堆栈,请输入:
    ldedit -b textpsize:0 -b datapsize:0 -b stackpsize:0
    这将清除 "XCOFF标头中的 "F_VARPG位。
  2. 要启用所有随机化属性,请输入:
    -baslr

    如果存在文本部分重定位,请勿启用文本和数据随机化。

  3. 要对文本启用随机化,请禁用堆栈的随机化,并保持其他值不变,请输入:
    -baslr:+t-s