Does not work how? Are you using i386?

2019-10-29 13:50 GMT+01:00, Guild Navigator <[email protected]>:
> # as why.asm -o why.o
> # ld why.o -e start -static -o why
>
> .global start
>
> .equ SYS_EXIT, 0x01
> .equ SYS_WRITE, 0x04
> .equ STD_OUT, 0x01
>
> # this example works in linux (with changed syscalls)
> # also in netbsd, but not in openbsd. why?
>
> .macro sys
> syscall
> .endm
>
> .text
>
> start:
> # print first message
> leaq msg1 (%rip), %rsi
> call print
>
> # print second message
> leaq msg2 (%rip), %rsi
> call print
>
> # print first message, but
> # this time from the array
> movq array (%rip), %rsi
> call print
>
> exit:
> movl $SYS_EXIT, %eax
> subl %edi, %edi
> sys
>
> # prints 9-char string
> # in   %rsi address of string
> print:
> push %rax
> push %rcx
> push %rdx
> push %rdi
> push %r11
> movl $9, %edx # string length
> movl $STD_OUT, %edi
> movl $SYS_WRITE, %eax
> sys
> pop %r11
> pop %rdi
> pop %rdx
> pop %rcx
> pop %rax
> ret
>
> .data
>
> msg1: .ascii "string 1\n"
> msg2: .ascii "string 2\n"
>
> array: .quad msg1, msg2
>
> .section ".note.openbsd.ident", "a"
>
> .align 2
> .long 8, 4, 1
> .asciz "OpenBSD"
> .long 0
> .align 2
>

Reply via email to