Программа работает неправильно...

Модератор: Модераторы разделов

Lockywolf
Сообщения: 56

Программа работает неправильно...

Сообщение Lockywolf »

Значит, есть такой исходник:

Код: Выделить всё

bits 32
global _start
_start:
    xor eax,eax
    jmp short string
code:
    pop esi
    push byte 14
    push esi
    push byte 1
    mov al,4
    push eax
    int 0x80
    xor eax,eax
    push eax
    push eax
    mov al,1
    int 0x80
string:
    call code
    db "Hello, world!", 0x0a

Должен, по идее, печатать hello_world системным вызовом write.

Но, зараза, не печатает...

Как собираю:

Вариант1:

Код: Выделить всё

nasm -f elf -o hello2e.o hello2.asm
ld -s -o hello2e hello2e.o

Соответественно, strace показвает вызов write без параметров.

Вариант2:

Код: Выделить всё

nasm -o hello2e.o hello2.asm
ld -s -b binary --entry=0x00 hello2e.o

Тогда он при запуске вообще выдает segfault.

Что же делать?
Где ошибка?
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Программа работает неправильно...

Сообщение NickLion »

Судя по этой статье, вы используете подход для FreeBSD. Это так? Если у Вас Linux, то нужно использовать регистры. Всё сказано на основе вышеупомянутой статьи. Проверить что-то сейчас не могу - винда.
Спасибо сказали: