前言,我正在当地大学进行系统编程。我们在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的等价物,以便不必查找系统代码。又名我只是改变了包含以便在Windows上组装。