당신이 시스템 호출 번호 4를 사용하여 뭔가를 인쇄 할 수 있습니다인쇄 뭔가 리눅스에서
mov eax,4 ;system call number
mov ebx,0 ;file descriptor
mov ecx,msg ;adress of message in data segment
mov edx,length ;length of message
그러나이 어떻게 스택 세그먼트에서 무언가를 인쇄 할 수 있습니까?
나는이 시도 :push 'H'
push 'e'
push 'l'
push 'l'
push 'o'
push ' '
push 'w'
push 'o'
push 'r'
push 'l'
push 'd'
mov eax,4 ;system call number
mov ebx,0 ;file descriptor
mov ecx,ebp ;adress of message
mov edx,11 ;length of message
을하지만 아무것도 인쇄되지 않습니다. 편집
: 나는 내 코드의 일부를 변경했고 지금은 이렇게이다 :
section .data
msg: db "Hola mundo",0Ah
ok: db "OK",0Ah
section .text
global _start
_start:
push 'leH'
push 'w ol'
push 'dlro'
mov eax,4 ;system call number
mov ebx,1 ;file descriptor
mov ecx,esp ;adress of message in data segment
mov edx,11 ;length of message
mov eax,1
xor ebx,ebx ;same as move ebx,0 but better
int 0x80
편집 2 (여전히 작동하지 않는)
section .data
msg: db "Hello world",0Ah
section .text
global _start
_start:
push 'leH'
push 'w ol'
push 'dlro'
mov eax,4 ;system call number
mov ebx,1 ;file descriptor
mov ecx,esp ;adress of message in data segment
mov edx,11 ;length of message
int 0x80
mov eax,1
xor ebx,ebx ;same as move ebx,0 but better
int 0x80
주석에 응답, 나는 조립 및 컴파일 :
nasm -f elf64 hello.asm && ld hello.o && ./a.out
저는 우분투 64 비트 리눅스에서 일하고 있습니다.
'ebp'는 스택 포인터가 아니며, 'esp'는입니다. 또한 'push'는 문자 당 4 바이트를 사용하므로 제대로 작동하지 않습니다. – Jester
'push'를 사용하여 문자열을 뒤집을 필요는 없습니다. – Jester
@Jester 문자열의 뒤집기는 내가 테스트하고 싶은 것입니다 –