はじめに、私は地元の大学でシステム プログラミングを学んでいます。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.
関連する質問です。問題が解決するかどうかはわかりません(解決しないと思います):
私は現在、定数と syscall コードをハードコーディングしています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
私の教授は、これらすべてを既に含むファイルがあると述べていましたが、それを含めることができましたが、その方法については言及していませんでした. 私はそのようなことを行う方法を見つけることができませんでした。また、syscode を検索する必要がないように、win と同等のものも知りたいです。別名、Windowsでアセンブルするためにインクルードを変更するだけです。