int 80
- это механизм в некоторых * a UNIX-подобных операционных системах для выполнения системных вызовов.
Для этих вызовов регистры используются для определенных значений.Из файла syscalls
:
0 STD NOHIDE { int nosys(void); } syscall nosys_args int
1 STD NOHIDE { void exit(int rval); } exit rexit_args void
2 STD POSIX { int fork(void); }
3 STD POSIX { ssize_t read(int fd, void *buf, size_t nbyte); }
4 STD POSIX { ssize_t write(int fd, const void *buf, size_t nbyte); }
вы можете видеть, что число 4 является вызовом write
и требует трех других параметров.Номер 1 - exit
, для которого нужен только код возврата.
При совершении вызова eax
- это системный вызов, который вы делаете, в то время как ebx
, ecx
и edx
- это трипараметры (при условии, что они все необходимы - например, exit
нужен только один).
Итак, вы можете прокомментировать код следующим образом:
move edx, len ; length of message (nbyte).
move ecx, msg ; message to print (buf).
move ebx, 1 ; file handle 1, stdout (fd).
move eax, 4 ; write syscall.
int 0x80 ; do it.
move ebx, 0 ; exit code (rval).
move eax, 1 ; exit syscall.
int 0x80 ; do it.
* a: Более поздние версии Linux представили новый интерфейс, который может использовать различные методы, основанные на том, который обеспечивает лучшую скорость.Например, некоторые чипы Intel работают намного быстрее, если вы используете sysenter
вместо int 80
.