【问题标题】:FASM linxu x86_64 Segmentation fault (core dumped) [duplicate]FASM linxu x86_64 分段错误(核心转储)[重复]
【发布时间】:2020-03-07 23:46:54
【问题描述】:

这是我的 linux x86_64 源代码:

这非常简单,但我得到了这个错误(分段错误(核心转储)

我也只用“ret”更改了“main”,但我又遇到了这个错误!!!!我不认为这是关于“主要”代码...

FORMAT ELF64 EXECUTABLE

SEGMENT READABLE EXECUTABLE

ENTRY main
main:
        mov     rax, 3     ; SYS_CLOSE
        mov     rdi, 0
        syscall    

我正在使用 './fasm.x64 prog.asm' 命令来编译这个文件 和我的操作系统 => 'Fedora 31 x86_64'

【问题讨论】:

  • 问题是您的main 函数无法返回任何内容。您需要通过调用exit 系统调用显式退出程序。

标签: assembly fasm


【解决方案1】:

您上面的代码尝试关闭文件句柄零,这充其量是可疑的,然后它继续执行程序结束后的代码,因此它崩溃了。

因此,您观察到的内容与您的“linux x86_64 源代码”完全一致。

(如果您尝试完成的不是崩溃,那么请提出一个不同的问题,解释您要实现的目标。)

【讨论】:

  • stdin (fd 0) 通常在进程启动时打开。您可以在 bash 中运行 ./my_program <&- 在执行程序之前关闭标准输入,但通常它连接到终端或 /dev/null 或其他东西。如果你想测试close 系统调用,一个已经打开的文件描述符(不是句柄;这是 POSIX 而不是 Windows)是一个不错的选择;你可以通过strace 看到它成功了。
猜你喜欢
  • 2016-01-08
  • 1970-01-01
  • 2019-03-14
  • 2013-02-22
  • 1970-01-01
  • 2015-06-25
  • 2021-06-03
相关资源
最近更新 更多