Описание тега red-zone
Красная зона - это пространство стека, защищенное от асинхронной модификации, даже если оно не зарезервировано обычным способом. Некоторые ABI (особенно x86-64 SysV ABI) предоставляют его.
0
ответов
Подозрительное использование области памяти указателя ниже стека для локальных переменных
Недавно я обнаружил неясный факт о резервировании памяти для локальных переменных в сгенерированном коде g++: переменные размещаются по адресам под указателем стека. Например, когда эта программа (main.cpp) скомпилирована: void __attribute__ ((noinl…
24 авг '17 в 11:07
2
ответа
Некорректное красное зонирование стека при генерации кода x86-64
Это вывод компилятора из функции ядра Linux (скомпилированный с -mno-red-zone): load_balance: .LFB2408: .loc 2 6487 0 .cfi_startproc .LVL1355: pushq %rbp # .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp #, .cfi_def_cfa_register 6 pushq %r…
29 июл '14 в 21:14
0
ответов
Почему в x64 функции epilog нет инструкции `отпуска`?
Я собираюсь понять, как работает стек на компьютерах с архитектурой x86 и x64. Однако я заметил, что когда я вручную пишу код и разбираю его, он отличается от того, что я вижу в коде, который предоставляют люди (например, в своих вопросах и руководс…
20 фев '19 в 08:15
2
ответа
Почему в этом прологе функции нет инструкции "sub rsp" и почему параметры функции хранятся с отрицательным смещением rbp?
Вот что я понял, прочитав некоторые документы по сегментации памяти: когда вызывается функция, есть несколько инструкций (называемых прологом функции), которые сохраняют указатель кадра в стеке, копируют значение указателя стека в базовый указатель …
24 фев '15 в 10:53
1
ответ
Недопустимый доступ к красной зоне стека при объединении сложного объекта
Я использую игру! Framework 1.2.4 для проекта, который передает объекты из внешнего контекста (собственно Flex) в сервис. Шлюз использует платформу Cinnamon (http://www.spicefactory.org/pimento/) для обработки запросов AMF, которые должны быть напра…
15 фев '12 в 22:05
2
ответа
Grails: неверный доступ к красной зоне стека
Я использую приложение Grails 2.0.4 на OS X (10.7.4). Приложение запускается без проблем, но когда я пытаюсь получить доступ к домашней странице в браузере, я получаю ошибки красной зоны стека: Invalid access of stack red zone 0x1139b10c0 rip=0x112e…
17 июл '12 в 22:26
2
ответа
Почему компилятор резервирует немного стекового пространства, но не весь размер массива?
Следующий код 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 …
25 июл '18 в 15:52
0
ответов
Сборка: я не понимаю, почему указатель стека кажется (!) резервировать здесь недостаточно памяти
Я новичок в сборке, поэтому ответ на мой вопрос вполне очевиден для большинства из вас, но не для меня. Пожалуйста, не вините. На 64-битной системе этот C-код: 1| int main () 2| { 3| char ary[230]; 4| ary[0] = 2; 5| return 0; 6| } Результаты в этом …
03 фев '19 в 15:12
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 00 0…
01 дек '11 в 07:18
4
ответа
Почему код ядра не может использовать красную зону
Настоятельно рекомендуется при создании 64-разрядного ядра (для платформы x86_64) указывать компилятору не использовать 128-байтовую красную зону, как это делает пользовательский интерфейс ABI. (Для GCC флаг компилятора -mno-red-zone). Ядро не будет…
20 авг '14 в 13:36
4
ответа
Неверный доступ к красной зоне стека из Java VM
Я пытаюсь выяснить, что может вызвать эту ошибку в Java: Invalid access of stack red zone 0x115ee0ed0 rip=0x114973900 Кто-нибудь когда-нибудь сталкивался с этим сообщением об ошибке? Это буквально убивает JVM, и все на этом останавливается. В настоя…
01 окт '09 в 03:35
2
ответа
Использование регистра базового указателя в C++ inline asm
Я хочу иметь возможность использовать регистр указателя базы (%rbpв пределах встроенного ассм. Игрушечный пример этого выглядит так: void Foo(int &x) { asm volatile ("pushq %%rbp;" // 'prologue' "movq %%rsp, %%rbp;" // 'prologue' "subq $12, %%rs…
29 дек '15 в 22:20
2
ответа
Зачем нам нужно выделение стека, когда у нас красная зона?
У меня есть следующие сомнения: Как мы знаем, System V x86-64 ABI дает нам область фиксированного размера (128 байт) в кадре стека, так называемую красную зону. Таким образом, в результате нам не нужно использовать, например, sub rsp, 12, Просто сде…
21 июн '16 в 10:20
5
ответов
Встроенная сборка, перекрывающая красную зону
Я пишу криптографическую программу, а ядро (широко распространенная процедура) написано на сборке x86-64, как для скорости, так и потому, что в ней широко используются такие инструкции, как adc которые не легко доступны из C. Я не хочу вставлять э…
17 июн '11 в 03:20
1
ответ
RSP не двигается при входе в новую функцию
При входе в функцию C я ожидал увидеть в разборке, как указатель стека вычитается достаточно, чтобы освободить место для переменных, но нет; Я только вижу, как адрес переменных напрямую доступен через ebp, когда esp все еще указывает на ebp. push %r…
04 ноя '17 в 15:14
1
ответ
Настройка локального стека в соответствии с соглашением о вызовах x86-64 в Linux
Я делаю некоторую расширенную оптимизацию сборки на коде gnu C, работающем на 64-битной Linux. Я хотел напечатать отладочные сообщения из кода сборки, и вот как я наткнулся на следующее. Я надеюсь, что кто-то может объяснить, что я должен делать в э…
08 дек '14 в 15:44
2
ответа
Где именно красная зона на x86-64?
Из Википедии: В вычислениях красная зона - это область фиксированного размера в кадре стека функции за пределами адреса возврата, который не сохраняется этой функцией. Функция вызываемого может использовать красную зону для хранения локальных переме…
26 июн '16 в 19:07
1
ответ
Отсутствие выделения стека в 64-битной системе при работе над статьей Aleph One
Я испортил "Smash the Stack для удовольствия и прибыли" от Aleph One и обнаружил, что при компиляции кода для моего 64-разрядного процессора стековая память не выделяется с использованием обычного "sub $VALUE, %REG ". Это исходный код функции: void …
09 окт '16 в 08:51
2
ответа
Зачем сохранять пространство стека для локальных переменных?
Я новичок в языке ассемблера, и мне было интересно узнать о локальных переменных: почему мы (или компиляторы) сохраняем для них место в стеке, обычно уменьшая регистр "ESP" в прологе процедуры и по окончании процедуры мы присваиваем "ESP" его старое…
05 май '15 в 15:04
0
ответов
Сборка странное использование стека
У меня есть несколько вопросов о том, как стек используется в сборке. Насколько я знаю, регистр% rsp используется в качестве указателя стека. Чтобы выделить новую память для стека в коде ассемблера, вы просто вычитаете необходимое количество из% rsp…
17 мар '19 в 14:05