История изменений
Исправление
vertexua,
(текущая версия)
:
Точнее я ошибся. Уже через эти хедеры вызывается libc. Раньше был таки 0x80h. Вот пример чистейшего syscall, которому нафиг не сдался libc
#include <unistd.h>
int main(){
write(1, "Hello world \n",13);
return 0;
}
gcc -S main.c
.file "main.c"
.section .rodata
.LC0:
.string "Hello world \n"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $13, %edx
movl $.LC0, %esi
movl $1, %edi
call write
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Gentoo 4.6.3 p1.11, pie-0.5.2) 4.6.3"
.section .note.GNU-stack,"",@progbits
Опа, call write. Погуглил, пишут что избавились от syscall напрямую (хотя все еще можно взять и написать), чтобы иметь возможность чуть похимичить в юзерспейсе ради производительности
Исходная версия
vertexua,
:
Точнее я ошибся. Уже через эти хедеры вызывается libc. Раньше был таки 0x80h
#include <unistd.h>
int main(){
write(1, "Hello world \n",13);
return 0;
}
gcc -S main.c
.file "main.c"
.section .rodata
.LC0:
.string "Hello world \n"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $13, %edx
movl $.LC0, %esi
movl $1, %edi
call write
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Gentoo 4.6.3 p1.11, pie-0.5.2) 4.6.3"
.section .note.GNU-stack,"",@progbits