【问题标题】:Minimal example to compile & run assembly with gcc?使用 gcc 编译和运行程序集的最小示例?
【发布时间】:2011-07-03 12:44:59
【问题描述】:
int main(int argc, char* argv[])
{
  return 0;
}

可以通过 gcc 编译成可执行文件的最短汇编示例是什么?

我遇到了this example,但是hi_temp:,.data之类的标签太多了,最低版本是多少?

【问题讨论】:

  • 什么 CPU(系列)、操作系统等?它应该输出“Hello world!”吗?还是不?
  • 那么输出呢?规范的“Hello world”程序实际上输出了该文本。
  • @Paul R ,return 1 就够了(movq $1 %rax),我想知道一个完整程序集的最小版本(带有最少标签)。
  • 好的,在这种情况下,您可能应该从问题中删除对“hello world”的引用以避免混淆

标签: linux assembly x86-64


【解决方案1】:
.text
    .align 4
    .globl main
main:
     pushl %ebp
     movl %esp,%ebp
     xorl %eax,%eax
     leave
     ret

编译和运行:

$ gcc -m32 asm.S
$ ./a.out

【讨论】:

  • gcc minimal.S 失败。 undefined reference to main'`
  • 您需要-m32 -nostdlib - 我将使用更易于构建和运行的版本更新答案
  • R ,很近,去掉.align 4行也可以。
  • 他确实说过return 0。添加xorl %eax,%eax?
  • 它不是最小的,因为它在堆栈框架上胡闹,这里不需要。
【解决方案2】:
.text
    .globl main
main:
     xorl %eax,%eax ;return 0
     ret

【讨论】:

  • .globl main之前的缩进是否必要?
  • 不,缩进只是个人喜好。
【解决方案3】:

下面是一个 Hello World 汇编示例,并附有解释:

http://asm.sourceforge.net/intro/hello.html

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 2012-02-13
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多