0

作为序言,我正在当地大学学习系统编程。我们在 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 上组装。

4

0 回答 0