gpt4 book ai didi

gcc - 用 gcc 清理 x86_64 汇编输出?

转载 作者:行者123 更新时间:2023-12-03 22:29:27 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to remove "noise" from GCC/clang assembly output?

(3 个回答)


5年前关闭。




我已经通过用 C 编写语句、用“gcc -S”编译它们并研究输出来自学 GNU 汇编有一段时间了。这在 x86 上运行正常(并使用 -m32 编译)但在我的 AMD64 机器上,对于此代码(仅作为示例):

int main()
{
return 0;
}

GCC 给了我:

.文件“test.c”
。文本
.globl 主
.type main, @function
主要的:
.LFB2:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
movl $0, %eax
离开
回复
.LFE2:
.size main, .-main
.section .eh_frame,"a",@progbits
.lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string "zR"
.uleb128 0x1
.sleb128 -8
.byte 0x10
.uleb128 0x1
.byte 0x3
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.long .LFB2
.long .LFE2-.LFB2
.uleb128 0x0
.byte 0x4
.long .LCFI0-.LFB2
.byte 0xe
.uleb128 0x10
.byte 0x86
.uleb128 0x2
.byte 0x4
.long .LCFI1-.LCFI0
.byte 0xd
.uleb128 0x6
.align 8
.LEFDE1:
.ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
.section .note.GNU-stack,"",@progbits

和....相比:

.文件“test.c”
。文本
.globl 主
.type main, @function
主要的:
leal 4(%esp), %ecx
和l $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
movl $0, %eax
popl %ecx
popl %ebp
leal -4(%ecx), %esp
回复
.size main, .-main
.ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
.section .note.GNU-stack,"",@progbits

在 x86 上。

有没有办法在没有绒毛的 x86_64 输出程序集上制作 GCC -S?

最佳答案

你可以尝试将你想学习的代码放在一个函数中。

例如。:

int ftest(void)
{
return 0;
}

int main(void)
{
return ftest();
}

如果您查看用于测试的程序集源,它将与您需要的一样干净。
..snip..
test:
.LFB2:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
movl $0, %eax
leave
ret
..snip..

关于gcc - 用 gcc 清理 x86_64 汇编输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com