Описание тега stack-frame

Используйте stackframe для вопросов, связанных с отладкой незавершенных вызовов функций.
3 ответа

C++ возвращает местонахождение объектов класса значения в памяти после оптимизации

Допустим, есть определенный пользователемclass Foo. В некоторых сообщениях предполагается, что объект класса C++ «никогда» не размещается в куче, если он не выделен с помощьюnew. Но! с другой стороны, есть сообщения, которые предполагают, что возвра…
1 ответ

Что означает, что регистр Ebp указывает на старый Ebp

Недавно я изучал ассемблер x86 для обратного проектирования, и в моем уроке есть предложение, в котором говорится, что Ebp указывает на старый Ebp, однако я этого не понимаю, это сбивает с толку. Я просмотрел другие сообщения об этом, но никто не от…
05 апр '23 в 17:01
1 ответ

Как выполнить оптимизацию хвостового вызова в Scala3?

Я пытаюсь написать программу, которая является 100% итеративной, то есть функции никогда не должны возвращаться, потому что после такого возврата ничего не должно происходить. Другими словами, программа на 100% находится в хвостовой позиции. Рассмот…
1 ответ

Как alloca() взаимодействовала с другими распределениями стека?

Начнем с простого примера распределения стека: void f() { int a, b; ... } Если я правильно понимаю. Тогда адрес и имеет фиксированное смещение от базы стека, а именно регистра.ebp. Вот как компилятор найдет их, если они нам понадобятся впоследствии.…
13 авг '23 в 06:30
0 ответов

C# найдите последний экземпляр, с которым взаимодействовали в стеке вызовов.

Я работаю над личнымC#проект, в котором я хочу перенаправить потоки консоли на разные входы/выходы для разных экземпляров объектов. Например, у меня есть класс, к которому у меня нет доступа к исходному коду. У меня есть несколько экземпляров , и я …
04 июл '23 в 23:53
1 ответ

Код сборки x86 выполняется успешно, но vscode показывает ошибку без дополнительной информации.

Я новичок в сборке, и у меня возникла проблема. Я скомпилировал следующий код с помощью GCC: .intel_syntax noprefix .section .data number: .int 65 message: .ascii "The number is %d %d.\n\0" .section .text .globl _main _main: push ebp lea eax, [messa…
16 апр '23 в 08:23
0 ответов

Как я могу получить доступ к аргументам 7+, используя встроенную сборку?

Я хотел бы создать вариативную функцию, которая суммирует свои входные данные. Мне удалось написать встроенную сборку для захвата аргументов 2–6, но я изо всех сил пытаюсь получить другие аргументы из кадра стека. Я пытаюсь решить упражнение по коди…
0 ответов

Где находится база в пустом возрастающем стеке в сборке ARM?

Сейчас я работаю над заданием для сборки ARM 7 (Big Endian). Мы используем LDMDB и STMIA для решения этой задачи, когда у нас есть пустой восходящий стек, и меня просят поместить значение указателя кадра на вершину стека. Затем меня просят указать у…
17 апр '23 в 04:53
1 ответ

Кадр, стек Кадр в процессе Укладка Разборка штабеля

Процесс укладки Когда я говорил о процессе стекирования, я имел в виду фрейм, в котором будут храниться данные регистров ЦП, таких как PC(счетчик программ) или LR, но советник сказал, что это не так, и не стал копать глубоко. Но когда я смотрю в Goo…
30 авг '23 в 07:12
1 ответ

Помещает ли System V ABI в Ubuntu адрес возврата в кадр вызывающей функции или в кадр вызываемой функции?

Моя система: Ubuntu 22.04.3, работающая на x86_64. GCC версия 11.4.0 Я спрашиваю об этом, потому что кажется, что существует два разных представления обратного адреса в зависимости от кадра, в котором он находится (вызывающий или вызываемый). Вот чт…
28 авг '23 в 12:37
0 ответов

Как отследить Stack Frame вручную, используя только необработанную запись в памяти программы?

У меня есть дамп памяти программы, и я знаю диапазон памяти стека. Мой вопрос вращается вокруг идентификации кадра стека в этом фрагменте памяти. Проще говоря, как я могу определить часть памяти, где хранится адрес возврата, который помещается в сте…
19 окт '23 в 21:51
0 ответов

Шахматы с ABI в стековом фрейме Windows x64

Итак, я делаю игрушечный компилятор для сборки, и моя программа дает сбой на границе моего сгенерированного кода и кода C. Вот как выглядит сборка: (Pseudo-code from my compiler) def test(x: int) -> int: return magic_func(magic_func(x, x), magic_…
0 ответов

Есть ли способ вычислить байты, выделенные для кадра стека функции?

Мне дали этот код на C, и мне нужно вычислить байты, выделенные для кадра стека функции arith. Я везде искал способ сделать это, но у всех разные ответы. long arith(long x, long y, long z){ long t1 = x + y; long t2 = z + t1; long t3 = x + 4; long t4…
27 окт '23 в 09:05
1 ответ

Как выделяется память для статического массива в стеке?

Я начал глубокое изучение эксплойтов, работы с памятью и т.д. и столкнулся с той же проблемой. Везде написано, что память выделяется переменным в порядке их объявления внутри функции, но в моем случае это абсолютно не влияет на это, т.е. указатель н…
18 окт '23 в 10:38
0 ответов

Почему компилятор обращается к аргументам относительно ESP в одной функции, а к EBP — в другой?

Вот код C-1: int max(int x, int y) { int diff = x - y; int mask = (diff >> 31) & 1; return y + mask * diff; } и его сборка O1 оптимизирована: movl 4(%esp), %eax movl %eax, %ecx subl 8(%esp), %ecx movl %ecx, %edx shrl $31, %edx imull %ecx, …
0 ответов

Я не могу использовать RSP для ссылки на конец стека.

в моей системе (x86_64), когда я использую GDB, и RBP, и RSP указывают на один и тот же адрес памяти после помещения нового кадра стека, поэтому я не могу ссылаться на конец стека с помощью регистра RSP, поскольку он имеет то же значение, что и RBP.…
26 ноя '23 в 04:19
0 ответов

tcl, как выполнить команду, в каком файле и в какой строке?

как узнать, когда я получаю сценарий tcl, какой proc/eval выполняется, в каком файле и в какой строке? ниже мой код: set counts [info frame]; set frame_list [info frame [expr {$counts - 2}] ] ; #for cmd type is "eval" set frame_list [info frame [exp…
05 окт '23 в 05:06