LINUX.ORG.RU

Сегфолт при использовании printf

 , , ,


0

2
itmpl:
.string "%d\n\0"
...
xorq %rbx,%rbx
...
nsl: cmpb $0x0a, tmpstr(%rbx)
je 1f
incq %rbx
decl %eax
jnz nsl
1: movb $0,tmpstr(%rbx)

movq $itmpl,%rdi
movq %rbx,%rsi
call printf

fastcall, x86_64. ЧЯДНТ?

★☆

Последнее исправление: Klymedy (всего исправлений: 1)

Ты уверен, что стек правильно выровнен и красная зона учтена?

proud_anon ★★★★★
()

x86_64 ABI, 3.2.3 Parameter Passing:

For calls that may call functions that use varargs or stdargs (prototype-less calls or calls to functions containing ellipsis (...) in the declaration) %al is used as hidden argument to specify the number of vector registers used. The contents of %al do not need to match exactly the number of registers, but must be an upper bound on the number of vector registers used and is in the range 0–8 inclusive.

Может, в непочищенном al дело?

ilammy ★★★
()

посмотри во что сишка компилится

anonymous
()
Ответ на: комментарий от ilammy

Да, спасибо, чистка помогла. Я думал, printf просто берёт столько параметров, сколько подстановок встретится, а оно сложнее оказалось...

MiniRoboDancer ★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.