Я изучаю ассемблер на Linux (noobuntu 10.04) я получил следующий код прочь: http://asm.sourceforge.net/intro/hello.htmlАссамблея, привет мир вопрос
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
Это просто привет мир. Работает в Linux + вызывает ядро напрямую (по-видимому). Может кто-нибудь объяснить, что здесь происходит? Я думаю, что он читает целые числа в eax & Регистры процессора ebx & ecx, edx data и определяет системный вызов при вызове ядра. Если да, то делают ли разные комбинации целых чисел разные системные вызовы при вызове int 0x80?
Я плохо разбираюсь в man-страницах, но прочитал каждый связанный с ним, я могу найти, какая-либо справочная страница подскажет, какие комбинации определяют, какие системные вызовы?
ЛЮБАЯ помощь приветствуется. Линия по линии объяснения будет удивительно ... -Спасибо заранее Джереми
Большое спасибо, это было мое подозрение и, тем не менее, полезно ... Можете ли вы рассказать мне, где я могу узнать больше? Являются ли эти синтаксические целые числа на страницах man? – Jeremy
Чтобы найти номера системных вызовов, вам нужно вникнуть в файлы заголовков исходного кода Linux. В настоящий момент у меня нет машины Linux, поэтому я не могу сказать вам точное местоположение, но это что-то вроде 'include/asm/syscall.h' в исходном дереве ядра. –
большое спасибо, вы были полезны. – Jeremy