Здравствуйте. Условия: FreeBSD, FASM. При компиляции: Код (Text): format ELF section '.text' executable public _start _start: proc TestFunction ret endp call TestFunction xor eax, eax push eax inc eax int 0x80 Возникает ошибка: Код (Text): flat assembler version 1.67.21 (16384 kilobytes memory) test.asm [5]: proc TestFunction error: illegal instruction. Скажите, существует ли поддержка директивы PROC и какие-нибудь соглашения вызова в компиляторе FASM под FreeBSD и другие *nix системы? Или все же придется писать: Код (Text): format ELF section '.text' executable public _start TestFunction: ret _start: call TestFunction xor eax, eax push eax inc eax int 0x80 С уважением, Andy.
n0name Спасибо. Либо, как вариант, использовать FasmLIB: http://board.flatassembler.net/topic.php?t=4696
IceStudent Я так понял ему нужно для своих процедур. А там без разницы. Процессор один, что под win, что под bsd.
andy_tallinn До call TestFunction дело даже не дойдёт, т.к. начало функции TestFunction совпадает с меткой _start, т.е. TestFunction выполнится на старте и ret (аварийно) завершит приложение. Тут нужен ещё один push с произвольным операндом, т.к. в BSD соглашение для системных вызовов требует дополнительного 4-байтного значения в стеке, эмулирующего адрес возврата: Код (Text): xor eax, eax push eax inc eax push eax ; dummy param int 0x80
n0name Абсолютно с Вами согласен. Quantum Отнюдь, нет. Метка _start по умолчанию используется как точка входа (компоновщик ld (в случае ELF-формата) ищет ее описание в коде как public symbol). В качестве доказательства, я провел эксперимент — переименовал метку _start в метку _startup. Результат говорит сам за себя: Код (Text): ld: warning: cannot find entry symbol _start; defaulting to 0000000008048074 Да, конечно. Признаюсь, не заметил упущение :-|
andy_tallinn Тебе Quantum говорил про баг: Код (Text): _start: proc TestFunction ret endp Хотя твой же второй вариант его не содержит: Код (Text): TestFunction: ret _start: А вот это напрасно - раньше или позже "необьяснимая" путаница обязательно возникнет