SQL - рабочие данные из другого столбца в том же виде

Как вы сказали, MacOS X имеет выравнивание по 16 байт, что означает, что машина ожидает, что каждая переменная в стеке начнется с байта, который кратен 16 из текущего указателя стека.

Когда стопка смещена, это означает, что мы начинаем пытаться читать переменные из середины этого 16-байтового окна и обычно заканчиваем с ошибкой сегментации.

Прежде чем вы вызовите рутину в своем коде, вам нужно чтобы убедиться, что ваш стек правильно выровнен; в этом случае, что означает, что регистр базового указателя делится на 16.

subq $8, %rsp               # stack is misaligned by 8 bytes
movq %rdi, 8(%rsp)          #
movq obj_size(%rdi), %rax   #
imul $8, %rax               #
movq %rax, %rdi             #
callq _malloc               # stack is still misaligned when this is called

Чтобы исправить это, вы можете subq %rsp получить что-то вроде 16 вместо 8.

subq $16, %rsp               # stack is still aligned
movq %rdi, 16(%rsp)          #
...                          #
callq _malloc                # stack is still aligned when this is called, good
0
задан clem995 22 March 2019 в 09:28
поделиться