我想学习一些程序集,并开始通过输出文本到屏幕上。我开始认为这可能是我的环境和/或编译:到现在为止,我非常沮丧,因为我真的是复制粘贴的汇编代码,但它不会调用系统调用。这里是源代码(主要改编自https://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux)大会 - 系统调用写返回-38,没有输出
.section .data
msg: .ascii "Hello World\n"
.section .text
.global main
main:
movq $1, %rdi # write to stdout
movq $msg, %rsi # use string "Hello World"
movq $12, %rdx # write 12 characters
syscall # make syscall
movq $60, %rax # use the _exit syscall
movq $0, %rdi # error code 0
syscall # make syscall
我运行Linux的卡莉在64位机器上,和我用gcc编译。像这样:
gcc -c test.s
gcc test.o -no-pie
我调试的程序与GDB和系统调用指令始终将EAX寄存器0xffffffffffffffda(-38),这看起来不正确...
谁能给一个洞察力?
哦,我这么愚蠢有时会...我想我需要休息我的眼睛有点:)。总之,还有一件事:系统调用错误代码的参考是什么?你怎么知道38等同于ENOSYS? – travisjayday
Nvm,我找到了它们:http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html – travisjayday
在过去,我通过'/ usr/include'头文件或'linux '的。但是现在我发现了一个名为'moreutils'的软件包,其中包含一个命令errno。只要运行'errno 38'就可以了。 – rodrigo