gpt4 book ai didi

无法在汇编中调用 `putchar`

转载 作者:行者123 更新时间:2023-11-30 14:40:51 26 4
gpt4 key购买 nike

我正在尝试使用putchar来自 C 标准库的函数。这看起来非常简单——你传入一个 int,它将字符写入标准输出。但是,当我编译并运行该程序时,没有任何反应。

    # This doesn't work:
.section .text
.globl _start

_start:
mov $0x41, %dil
call putchar

mov $60, %rax
syscall

最佳答案

您看不到任何输出,因为 libc 的 IO 包执行缓冲 IO,并且您在终止程序之前没有刷新 stdout 的缓冲区。这个问题是一个更大的潜在问题的症状,那就是您没有正确初始化和取消初始化 libc。在每个使用 libc 的程序中,您应该:

  1. 让 libc 在启动时自行初始化,使其初始化代码为 _start 并调用您的 main 函数
  2. 不通过 syscall 指令执行原始系统调用,而是使用 libc 提供的包装器
  3. 通过调用exit或从main返回来正确终止程序
  4. 使用 C 编译器驱动程序 cc 正确链接所有 libc 代码来链接您的程序,而不是直接调用链接编辑器

一旦您更有经验,您可能会偏离这些建议,但这样做可能会产生您可能没有意识到的微妙后果,因此现在最好只遵循这些规则。

关于无法在汇编中调用 `putchar`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55327111/

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