Системные вызовы и brk vs sbrk в частности

nimazzzy

, спасибо, всё начинает проясняться...

Потому что я всё делаю в Windows (в т.ч. компиляцию), а Ubuntu стоит на виртуалке только для запуска. Т.к. он для меня пока как тёмный лес (установил его дня 3 назад только). И вообще я впервые с этим всем сталкиваюсь

Т.е. если я буду производить компиляцию в Linux'е, то там всё автоматом прилинкуется? Или нужно находить где-то

sbrk.o

и его прилинковывать

ld

'ом?

А почему

rdi

, если это обычная функция? Или туда параметры передаются только в формате ebx, ecx, edx... / rdi, rsi, rdx... а не через

push

(я пока с 32 битами работаю)?

После выделения памяти, освобождать её нужно перед выходом или нет?

Кстати, где-то мельком прочитал, что в Debian (Ubuntu, значит, тоже) вызывать

int 0x80

(или

syscall

) можно не только передав параметры через регистры, но и передав их через стек (

cdecl

). Если это так, как же система определяет какой именно способ я использовал?

Под винду при таком названим функции (

main

) компиляция не создавала точку входа, только

_start

или явно указывать через

-e main

. Или в линуксе можно использовать

main

(без указания

-e

)?

Добавлено через 22 минуты

nimazzzy

, у нас, видимо, какие-то разные ассемблеры (в Ubuntu). Во-первых,

as

использует AT&T-синтаксис, во-вторых, .globl вместо global и .extern вместо extern...

И когда я линкую всё это дело, он пишет, что функции

sbrk

нет (undefined reference). Где её искать-то?