最初コミット
This commit is contained in:
2
Makefile
Normal file
2
Makefile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
all:
|
||||||
|
cc -nostdlib -static -masm=intel -o main main.c
|
||||||
30
README.md
Normal file
30
README.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
此れはlibcなしの「こんにちは、世界」のデモです。\
|
||||||
|
Linux、FreeBSD、OpenBSD、NetBSD、及びmacOSで実行出来ますが、IntelやAMD CPUが必須に成ります。
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make
|
||||||
|
$ cc -nostdlib -static -masm=intel -o main main.c
|
||||||
|
$ ls -thal main
|
||||||
|
-rwxr-xr-x 1 suwako suwako 1.6K 12月 15 15:57 main
|
||||||
|
$ file main
|
||||||
|
main: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), statically linked, not stripped
|
||||||
|
$ objdump -M intel -d main
|
||||||
|
|
||||||
|
main: file format elf64-x86-64
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00000000002011f0 <_start>:
|
||||||
|
2011f0: 55 push rbp
|
||||||
|
2011f1: 48 89 e5 mov rbp, rsp
|
||||||
|
2011f4: b8 04 00 00 00 mov eax, 0x4
|
||||||
|
2011f9: bf 01 00 00 00 mov edi, 0x1
|
||||||
|
2011fe: 48 c7 c6 20 22 20 00 mov rsi, 0x202220
|
||||||
|
201205: ba 1c 00 00 00 mov edx, 0x1c
|
||||||
|
20120a: 0f 05 syscall
|
||||||
|
20120c: b8 01 00 00 00 mov eax, 0x1
|
||||||
|
201211: 31 ff xor edi, edi
|
||||||
|
201213: 0f 05 syscall
|
||||||
|
201215: 5d pop rbp
|
||||||
|
201216: c3 ret
|
||||||
|
```
|
||||||
33
main.c
Normal file
33
main.c
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#if defined(__linux__)
|
||||||
|
#define SYS_WRITE 1
|
||||||
|
#define SYS_EXIT 60
|
||||||
|
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
|
#define SYS_WRITE 4
|
||||||
|
#define SYS_EXIT 1
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
#define SYS_WRITE 0x2000004
|
||||||
|
#define SYS_EXIT 0x2000001
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char msg[] = "こんにちは、世界!\n";
|
||||||
|
|
||||||
|
void _start() {
|
||||||
|
asm volatile(
|
||||||
|
".intel_syntax noprefix\n"
|
||||||
|
"mov eax, %[sys_write]\n"
|
||||||
|
"mov edi, 1\n"
|
||||||
|
"mov rsi, offset msg\n"
|
||||||
|
"mov edx, %[len]\n"
|
||||||
|
"syscall\n"
|
||||||
|
|
||||||
|
"mov eax, %[sys_exit]\n"
|
||||||
|
"xor edi, edi\n"
|
||||||
|
"syscall\n"
|
||||||
|
|
||||||
|
".att_syntax prefix\n"
|
||||||
|
:: [sys_write] "i" (SYS_WRITE),
|
||||||
|
[sys_exit] "i" (SYS_EXIT),
|
||||||
|
[len] "i" (sizeof(msg) - 1)
|
||||||
|
: "rax", "rdi", "rsi", "rdx", "rcx", "r11"
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user