int 80
механизма в некотором * а 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.
* а: Более поздние версии Linux представила новый интерфейс, который может использовать различные методы, на основании которых обеспечивает лучшую скорость , Например, некоторые чипы Intel намного быстрее, если вы используете sysenter
, а не int 80
.
Книга для какого процессора? Какой процессор вы используете? – Oded
Я уверен, что это для процессоров x86. – 2010-11-06 14:19:09