내가 (10.04 noobuntu) 리눅스에서 ASM을 배우고 나는 떨어져 다음 코드를 가지고 : 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 +에서의 실행은 커널을 직접 호출합니다 (분명히). 누구든지 실제로 여기서 무슨 일이 일어 났는지 설명해 주실 수 있습니까? 나는 exx 프로세서의 & ebx 프로세서 레지스터의 정수를 읽고, & ecx, edx 데이터를 등록하고 커널이 호출 될 때 시스템 호출을 정의한다고 생각한다. 그렇다면 int 0x80이 호출 될 때 서로 다른 조합의 정수가 다른 시스템 호출을 정의합니까?
필자는 man 페이지에 좋지 않지만, 필자가 찾을 수있는 모든 관련 문서를 읽었으며, 어떤 man 페이지가 어떤 syscalls 조합을 정의하는지 알려줍니까?
아무 도움이됩니다. 라인 설명에 의해 라인이 사전에 놀라운 ... 고마워요을 것 제레미
고맙습니다. 그럼에도 불구하고 이것은 내 의심이고 도움이되었습니다. 더 자세히 알 수있는 곳을 말해 줄 수 있습니까? 이 syscall 정수가 설명서 페이지에 있습니까? – Jeremy
시스템 호출 번호를 찾으려면 Linux 소스 헤더 파일을 자세히 조사해야합니다. 나는 현재 리눅스 머신을 가지고 있지 않기 때문에 정확한 위치를 알려줄 수는 없지만 커널 소스 트리에'include/asm/syscall.h'와 같은 것이있다. –
대단히 감사합니다. v. 도움이되었습니다. – Jeremy