blob: 4dcb77bed632ebb2b1eb99e824c8dfaa00ce08bc (
plain) (
tree)
|
1
2pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight # Some OS-specific preliminaries for Linux.
# Memory layout
#
# 0 - 0x08047ffff - reserved for the kernel
# 0x08048000 - 0xbffffffff - available for user programs
# 0xc0000000 - 0xfffffffff - reserved for the kernel
== code 0x09000000
== data 0x0a000000
# Syscalls
#
# We don't have libc, so we need to know Linux's precise syscall layout.
== code
# http://man7.org/linux/man-pages/man2/exit.2.html
syscall_exit: # status/ebx : int
b8/copy-to-eax 1/imm32
cd/syscall 0x80/imm8
# http://man7.org/linux/man-pages/man2/read.2.html
syscall_read: # fd/ebx : int, buf/ecx : address, size/edx : int -> nbytes-or-error/eax : int
b8/copy-to-eax 3/imm32
cd/syscall 0x80/imm8
c3/return
# http://man7.org/linux/man-pages/man2/write.2.html
syscall_write: # fd/ebx : int, buf/ecx : address, size/edx : int -> nbytes-or-error/eax : int
b8/copy-to-eax 4/imm32
cd/syscall 0x80/imm8
c3/return
# http://man7.org/linux/man-pages/man2/open.2.html
syscall_open: # filename/ebx : (address null-terminated-string), flags/ecx : int -> fd-or-error/eax : int
b8/copy-to-eax 5/imm32
cd/syscall 0x80/imm8
c3/return
# http://man7.org/linux/man-pages/man2/close.2.html
syscall_close: # fd/ebx : int -> status/eax
b8/copy-to-eax 6/imm32
cd/syscall 0x80/imm8
c3/return
# http://man7.org/linux/man-pages/man2/creat.2.html
syscall_creat: # filename/ebx : (address null-terminated-string) -> fd-or-error/eax : int
b8/copy-to-eax 8/imm32
cd/syscall 0x80/imm8
c3/return
# http://man7.org/linux/man-pages/man2/unlink.2.html
syscall_unlink: # filename/ebx : (address null-terminated-string) -> status/eax : int
b8/copy-to-eax 0xa/imm32
cd/syscall 0x80/imm8
c3/return
# http://man7.org/linux/man-pages/man2/rename.2.html
syscall_rename: # source/ebx : (address null-terminated-string), dest/ecx : (address null-terminated-string) -> status/eax : int
b8/copy-to-eax 0x26/imm32
cd/syscall 0x80/imm8
c3/return
# https://github.com/torvalds/linux/blob/fa121bb3fed6313b1f0af23952301e06cf6d32ed/mm/nommu.c#L1352
syscall_mmap: # arg/ebx : (address mmap_arg_struct) -> status/eax : int
# the important thing: ebx+4 contains the 32-bit size to be allocated
b8/copy-to-eax 0x5a/imm32
cd/syscall 0x80/imm8
c3/return
|