これはオンサイトインタビューの質問で、私は困惑しました。
Linux用のHello worldプログラムを書くように頼まれました..それもシステム内のライブラリを使用せずに. システムコールか何かを使用する必要があると思います..コードは -nostdlib および -nostartfiles オプションを使用して実行する必要があります..
誰かが助けてくれたら最高だ..
$ cat > hwa.S
write = 0x04
exit = 0xfc
.text
_start:
movl $1, %ebx
lea str, %ecx
movl $len, %edx
movl $write, %eax
int $0x80
xorl %ebx, %ebx
movl $exit, %eax
int $0x80
.data
str: .ascii "Hello, world!\n"
len = . -str
.globl _start
$ as -o hwa.o hwa.S
$ ld hwa.o
$ ./a.out
Hello, world!
例4を見てください(移植性の賞は獲得できません):
#include <syscall.h>
void syscall1(int num, int arg1)
{
asm("int\t$0x80\n\t":
/* output */ :
/* input */ "a"(num), "b"(arg1)
/* clobbered */ );
}
void syscall3(int num, int arg1, int arg2, int arg3)
{
asm("int\t$0x80\n\t" :
/* output */ :
/* input */ "a"(num), "b"(arg1), "c"(arg2), "d"(arg3)
/* clobbered */ );
}
char str[] = "Hello, world!\n";
int _start()
{
syscall3(SYS_write, 0, (int) str, sizeof(str)-1);
syscall1(SYS_exit, 0);
}
編集:以下のZan Lynxが指摘しているように、 sys_writeの最初の引数はファイル記述子です。したがって、このコードは、 stdout(fd 1)ではなくstdin(fd 0)に"Hello, world!\n"
書き込むという珍しいことを行います。
以下のリンクにある例のように、純粋なアセンブラで書いてみてはどうでしょうか。
http://blog.var.cc/blog/archive/2004/11/10/hello_world_in_x86_assembly__programming_workshop.html
OSに直接話しかける必要があります。write
次のようにして、記述子 1 (stdout) をファイルすることができます。
#include <unistd.h>
int main()
{
write(1, "Hello World\n", 12);
}
シェルスクリプトはどうですか?質問にはプログラミング言語の要件はありませんでした。
echo "Hello World!"