Size: a a a

2020 April 24

ИИ

Искандер Искаков in pro.asm
Я собственно и код который вы предложили не особо понимаю. А уж сломать :D
источник

R

Rabu in pro.asm
попробуй скомпилить с fstack-protector
источник

ИИ

Искандер Искаков in pro.asm
Не помогло
источник

s

s54816 in pro.asm
Искандер Искаков
Ткните пожалуйста носом, почему здесь Address boundary error?



BITS 64
DEFAULT REL ; RIP-relative addressing by default

; compile with:
; nasm -g -f macho64 ft_write.s
; gcc -o a.out ft_write.o main.c


; glibc stuff
extern _errno

; code
section .text

global _ft_write

_ft_write:
 push rsp
 push rax
 push rbp
 push r8

 sub rsp, 16
 mov r8, 0x2000004 ; write syscall location
 lea rax, [r8]
 syscall
 test rax, rax
 jne error

 xor rax, rax
 add rsp, 16
 pop rbp
 pop rax
 pop rsppop r8
 ret
 
error:
 add rsp, 16
 call _errno  
 pop rbp
 pop rax
 pop rsp
 pop r8
 ret
А что, в macOS errno — это функция? Всё у этой вашей Apple не по-человечески!
источник

ИИ

Искандер Искаков in pro.asm
Это Сишная, из libc. =)
источник

ИИ

Искандер Искаков in pro.asm
стоп... или я что-то путаю...мм
источник

s

s54816 in pro.asm
Искандер Искаков
Это Сишная, из libc. =)
В Си это либо переменная типа int, либо макрос, который разворачивается в выражение, получающее адрес errno из TLS.
источник

ИИ

Искандер Искаков in pro.asm
Есть подозрение что это очень дельное замечание... возможно это и не функция-то вовсе.... Очень благодарен!!!!
источник

ИИ

Искандер Искаков in pro.asm
Я дебил... нужно было вызвать функцию  error()
источник

ИИ

Искандер Искаков in pro.asm
Проблему это, впрочем, не решило. Всё так-же "Address boundary error".
Но это очень дельно, спасибо.
Я бы сам точно не заметил и никуда не продвинулся был.
источник

s

s54816 in pro.asm
Искандер Искаков
Проблему это, впрочем, не решило. Всё так-же "Address boundary error".
Но это очень дельно, спасибо.
Я бы сам точно не заметил и никуда не продвинулся был.
Там ещё порядок регистров в pop неправильный, например. Должен быть порядок, обратный push. И параметры для сисколла не передаются, и сисколл читает тот мусор, который был в регистрах.
источник

ЕК

Евгений Красников (Jin X) in pro.asm
А зачем rsp в стек кидать?
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Ещё забавляет
xor rax,rax
pop rax

:)
источник

ИИ

Искандер Искаков in pro.asm
Спасибо, я исправлю, однако когда дебажу до туда и не доходит собственно. Ошибка примерно при вызове error и происходит, уже внутри
источник

ИИ

Искандер Искаков in pro.asm
Евгений Красников (Jin X)
Ещё забавляет
xor rax,rax
pop rax

:)
Да блин, не говорите.  Совсем мозги уже плавит...
источник
2020 April 25

ИИ

Искандер Искаков in pro.asm
Евгений Красников (Jin X)
Syscall — это инструкция без параметров. После её выполнения в linux возвращаются значения в регистра общего назначения, не во флагах. Если у тебя будет обертка, тогда работать будет.
А как примерно должна выглядеть это обертка, мне нужно сделать cmp неких байт из общего регистра, в которых содержится информация, возвращенная после выполнения Syscall? Спасибо!
источник

ИИ

Искандер Искаков in pro.asm
global _ft_write

_ft_write:
 push rbp

 mov  rax, 0x2000004 ; adress of <write> syscall
 syscall
 jnz error

 pop rbp
 ret

error:
 call _perror
 pop rbp
 ret

Сейчас примерно вот так выглядит код. Соответственно jnz после syscall, как я понимаю не особо имеет смысл, без обёртки, верно?
источник

ИИ

Искандер Искаков in pro.asm
test rax,rax?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮ in pro.asm
Jcc работает с флагами. чтоб они были выставлены нужно использовать команды которые меняет флаги. в твоем случае, если ты говоришь что нужно сравнить байты, то лучше подойдет cmp.  cmp сравнивет что то с чем то. и вот эти данные нужно поместить в операнды самой cmp. как эти операнды получить - тебе лучше знать
источник

ИИ

Искандер Искаков in pro.asm
Спасибо!
источник