作为序言,我正在当地大学学习系统编程。我们在 vBox 上使用 Ubuntu 来组装 yasm 并运行我们的程序。我有正常运行的代码,但我相信 vm 开销会导致时序执行问题。我们正在开发一个线程程序。
我想在我的本机 win7 安装上组装和运行该程序,但出现链接错误。我在 Windows 上使用的命令是:
yasm -f x64 hw12.asm
ld -o hw12.exe hw12.obj
它组装了,但是当我链接时,我得到了hw12.obj: file not recognized: File format not recognized
以下是版本信息:
yasm --version
yasm 1.3.0
Compiled on Aug 17 2014.
Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.
ld --version
GNU ld (GNU Binutils) 2.25.1
Copyright (C) 2014 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
一个相关的问题,我不知道它是否会解决问题(我假设不会):
我目前将常量和系统调用代码硬编码在section .data
. 这是供参考的代码:
section .data
; -----
; Define standard constants.
LF equ 10 ; line feed
NULL equ 0 ; end of string
ESC equ 27 ; escape key
TRUE equ 1
FALSE equ 0
SUCCESS equ 0 ; Successful operation
NOSUCCESS equ 1 ; Unsuccessful operation
STDIN equ 0 ; standard input
STDOUT equ 1 ; standard output
STDERR equ 2 ; standard error
SYS_read equ 0 ; system call code for read
SYS_write equ 1 ; system call code for write
SYS_open equ 2 ; system call code for file open
SYS_close equ 3 ; system call code for file close
SYS_fork equ 57 ; system call code for fork
SYS_exit equ 60 ; system call code for terminate
SYS_creat equ 85 ; system call code for file open/create
SYS_time equ 201 ; system call code for get time
我的教授提到有一个文件已经包含所有这些,可以包含但没有提及如何包含。我一直无法找到如何做这样的事情,并且也想知道 win 的等价物,以免不得不查找 syscodes。aka 我会简单地更改包含以便在 Windows 上组装。