如何防止 ld 添加 .note.gnu.property?
How do I prevent ld from adding .note.gnu.property?
我有一个玩具 x86 汇编程序,我正在使用 as
和 ld
:
编写和编译
.text
.global _start
_start:
movq , %rax
movq [=11=]x7FFFFFFF, %rbx
L1:
cmp %rbx, %rax
je L2
addq , %rax
jmp L1
L2:
movq %rax, %rbx
movq , %rax
int [=11=]x80
然后构建:
as -o test.o test.S
ld -s -o test test.o
此操作的第二步 -- ld
-- 生成附加注释:
$ objdump -D test
test: file format elf64-x86-64
Disassembly of section .note.gnu.property:
00000000004000e8 <.note.gnu.property>:
4000e8: 04 00 add [=13=]x0,%al
4000ea: 00 00 add %al,(%rax)
4000ec: 10 00 adc %al,(%rax)
4000ee: 00 00 add %al,(%rax)
4000f0: 05 00 00 00 47 add [=13=]x47000000,%eax
4000f5: 4e 55 rex.WRX push %rbp
4000f7: 00 01 add %al,(%rcx)
4000f9: 00 00 add %al,(%rax)
4000fb: c0 04 00 00 rolb [=13=]x0,(%rax,%rax,1)
4000ff: 00 01 add %al,(%rcx)
400101: 00 00 add %al,(%rax)
400103: 00 00 add %al,(%rax)
400105: 00 00 add %al,(%rax)
...
Disassembly of section .text:
0000000000401000 <.text>:
401000: 48 c7 c0 01 00 00 00 mov [=13=]x1,%rax
401007: 48 c7 c3 ff ff ff 7f mov [=13=]x7fffffff,%rbx
40100e: 48 39 d8 cmp %rbx,%rax
401011: 74 06 je 0x401019
401013: 48 83 c0 01 add [=13=]x1,%rax
401017: eb f5 jmp 0x40100e
401019: 48 89 c3 mov %rax,%rbx
40101c: 48 c7 c0 01 00 00 00 mov [=13=]x1,%rax
401023: cd 80 int [=13=]x80
有没有办法消除或防止生成 .note.gnu.property 部分?
我没有找到直接标志传递给 ld 以防止生成此部分(-s 和 -s -x 都不起作用),即使调用 strip --strip-all
也不会删除此部分,但是, strip --remove-section=.note.gnu.property test
删除了部分:
$ as -o test.o test.s
$ ld -o test test.o
$ objdump -D test
test: file format elf64-x86-64
Disassembly of section .note.gnu.property:
00000000004000e8 <.note.gnu.property>:
4000e8: 04 00 add [=10=]x0,%al
4000ea: 00 00 add %al,(%rax)
4000ec: 10 00 adc %al,(%rax)
4000ee: 00 00 add %al,(%rax)
4000f0: 05 00 00 00 47 add [=10=]x47000000,%eax
4000f5: 4e 55 rex.WRX push %rbp
4000f7: 00 01 add %al,(%rcx)
4000f9: 00 00 add %al,(%rax)
4000fb: c0 04 00 00 rolb [=10=]x0,(%rax,%rax,1)
4000ff: 00 01 add %al,(%rcx)
400101: 00 00 add %al,(%rax)
400103: 00 00 add %al,(%rax)
400105: 00 00 add %al,(%rax)
...
Disassembly of section .text:
0000000000401000 <_start>:
401000: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401007: 48 c7 c3 ff ff ff 7f mov [=10=]x7fffffff,%rbx
000000000040100e <L1>:
40100e: 48 39 d8 cmp %rbx,%rax
401011: 74 06 je 401019 <L2>
401013: 48 83 c0 01 add [=10=]x1,%rax
401017: eb f5 jmp 40100e <L1>
0000000000401019 <L2>:
401019: 48 89 c3 mov %rax,%rbx
40101c: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401023: cd 80 int [=10=]x80
$ strip --remove-section=.note.gnu.property test
strip: test: warning: empty loadable segment detected at vaddr=0x400000, is this intentional?
$ objdump -D test
test: file format elf64-x86-64
Disassembly of section .text:
0000000000401000 <.text>:
401000: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401007: 48 c7 c3 ff ff ff 7f mov [=10=]x7fffffff,%rbx
40100e: 48 39 d8 cmp %rbx,%rax
401011: 74 06 je 0x401019
401013: 48 83 c0 01 add [=10=]x1,%rax
401017: eb f5 jmp 0x40100e
401019: 48 89 c3 mov %rax,%rbx
40101c: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401023: cd 80 int [=10=]x80
objcopy --remove-section .note.gnu.property test
适合我。
我有一个玩具 x86 汇编程序,我正在使用 as
和 ld
:
.text
.global _start
_start:
movq , %rax
movq [=11=]x7FFFFFFF, %rbx
L1:
cmp %rbx, %rax
je L2
addq , %rax
jmp L1
L2:
movq %rax, %rbx
movq , %rax
int [=11=]x80
然后构建:
as -o test.o test.S
ld -s -o test test.o
此操作的第二步 -- ld
-- 生成附加注释:
$ objdump -D test
test: file format elf64-x86-64
Disassembly of section .note.gnu.property:
00000000004000e8 <.note.gnu.property>:
4000e8: 04 00 add [=13=]x0,%al
4000ea: 00 00 add %al,(%rax)
4000ec: 10 00 adc %al,(%rax)
4000ee: 00 00 add %al,(%rax)
4000f0: 05 00 00 00 47 add [=13=]x47000000,%eax
4000f5: 4e 55 rex.WRX push %rbp
4000f7: 00 01 add %al,(%rcx)
4000f9: 00 00 add %al,(%rax)
4000fb: c0 04 00 00 rolb [=13=]x0,(%rax,%rax,1)
4000ff: 00 01 add %al,(%rcx)
400101: 00 00 add %al,(%rax)
400103: 00 00 add %al,(%rax)
400105: 00 00 add %al,(%rax)
...
Disassembly of section .text:
0000000000401000 <.text>:
401000: 48 c7 c0 01 00 00 00 mov [=13=]x1,%rax
401007: 48 c7 c3 ff ff ff 7f mov [=13=]x7fffffff,%rbx
40100e: 48 39 d8 cmp %rbx,%rax
401011: 74 06 je 0x401019
401013: 48 83 c0 01 add [=13=]x1,%rax
401017: eb f5 jmp 0x40100e
401019: 48 89 c3 mov %rax,%rbx
40101c: 48 c7 c0 01 00 00 00 mov [=13=]x1,%rax
401023: cd 80 int [=13=]x80
有没有办法消除或防止生成 .note.gnu.property 部分?
我没有找到直接标志传递给 ld 以防止生成此部分(-s 和 -s -x 都不起作用),即使调用 strip --strip-all
也不会删除此部分,但是, strip --remove-section=.note.gnu.property test
删除了部分:
$ as -o test.o test.s
$ ld -o test test.o
$ objdump -D test
test: file format elf64-x86-64
Disassembly of section .note.gnu.property:
00000000004000e8 <.note.gnu.property>:
4000e8: 04 00 add [=10=]x0,%al
4000ea: 00 00 add %al,(%rax)
4000ec: 10 00 adc %al,(%rax)
4000ee: 00 00 add %al,(%rax)
4000f0: 05 00 00 00 47 add [=10=]x47000000,%eax
4000f5: 4e 55 rex.WRX push %rbp
4000f7: 00 01 add %al,(%rcx)
4000f9: 00 00 add %al,(%rax)
4000fb: c0 04 00 00 rolb [=10=]x0,(%rax,%rax,1)
4000ff: 00 01 add %al,(%rcx)
400101: 00 00 add %al,(%rax)
400103: 00 00 add %al,(%rax)
400105: 00 00 add %al,(%rax)
...
Disassembly of section .text:
0000000000401000 <_start>:
401000: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401007: 48 c7 c3 ff ff ff 7f mov [=10=]x7fffffff,%rbx
000000000040100e <L1>:
40100e: 48 39 d8 cmp %rbx,%rax
401011: 74 06 je 401019 <L2>
401013: 48 83 c0 01 add [=10=]x1,%rax
401017: eb f5 jmp 40100e <L1>
0000000000401019 <L2>:
401019: 48 89 c3 mov %rax,%rbx
40101c: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401023: cd 80 int [=10=]x80
$ strip --remove-section=.note.gnu.property test
strip: test: warning: empty loadable segment detected at vaddr=0x400000, is this intentional?
$ objdump -D test
test: file format elf64-x86-64
Disassembly of section .text:
0000000000401000 <.text>:
401000: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401007: 48 c7 c3 ff ff ff 7f mov [=10=]x7fffffff,%rbx
40100e: 48 39 d8 cmp %rbx,%rax
401011: 74 06 je 0x401019
401013: 48 83 c0 01 add [=10=]x1,%rax
401017: eb f5 jmp 0x40100e
401019: 48 89 c3 mov %rax,%rbx
40101c: 48 c7 c0 01 00 00 00 mov [=10=]x1,%rax
401023: cd 80 int [=10=]x80
objcopy --remove-section .note.gnu.property test
适合我。