Результаты поиска по запросу "red-zone"

2 ответа

Почему GCC вычитает неправильное значение указателю стека при выделении большого массива без последующих вызовов функций?

Действительно странная причудливость GCC. Проверь это: main() { int a[100]; a[0]=1; }производит эту сборку: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 81 ec 18 01 00 00 sub $0x118,%rsp b: c7 85 70 fe ff ff 01 movl $0x1,-0x190(%rbp) 12: 00 ...

2 ответа

 вместо 368, так что массив все еще выровнен по 16 байтов. (IIRC, x86-64 System V ABI, по крайней мере, рекомендует это для массивов с автоматическим хранением с размером> = 16 байт.)

ющий код int main() { int arr[120]; return arr[0]; }Компилируется в это: sub rsp, 360 mov eax, DWORD PTR [rsp-480] add rsp, 360 retЗная, что целые числа составляют 4 байта, а размер массива - 120, массив должен занимать 480 байтов, но из ESP ...

5 ответов

, компилятор все еще может пролить аргументы функций в красную зону.

у криптографическую программу, а ядро ​​(широко распространенная процедура) написано в сборке x86-64, как для скорости, так и потому, что оно широко использует такие инструкции, какadc которые не легко доступны из C. Я не хочу вставлять эту ...

ТОП публикаций

2 ответа

Зачем нам нужно выделение стека, когда у нас красная зона?

1 ответ

Почему в этом прологе функции нет инструкции «sub rsp» и почему параметры функции хранятся с отрицательным смещением rbp?

4 ответа

Неверный доступ к красной зоне стека из Java VM

Я пытаюсь выяснить, что может вызвать эту ошибку в Java: Invalid access of stack red zone 0x115ee0ed0 rip=0x114973900Кто-нибудь когда-нибудь сталкивался с этим сообщением об ошибке? Это буквально убивает JVM, и все на этом останавливается. В ...

4 ответа

Неверный доступ к красной зоне стека из Java VM

2 ответа

Используя регистр указателя базы в C ++, встроенный asm

Я хочу использовать регистр указателя базы %rbp) в рамках встроенного ассм. Игрушечный пример этого выглядит так: void Foo(int &x) { asm volatile ("pushq %%rbp;" // 'prologue' "movq %%rsp, %%rbp;" // 'prologue' "subq $12, %%rsp;" // make room ...