Как перевести сборку на C со стеком, реализованным в куче?

Я знаю, что есть некоторые посты, рассказывающие о переводе ассемблера в C, но в основном все они направлены на то, как получить исходный код на человеко-читабельном C

Поэтому я хочу добиться процесса перевода со стеком, реализованным в куче.

Мне не нужно делать код легким для чтения, только переводить его в легальный исходный код c или даже псевдокод (если прямой перевод в исходный код c слишком сложен),

но в этой относительно простой задаче (совсем не просто) я хочу реализовать стек в куче, как это сделали компиляторы ML и Scheme.

Может ли кто-нибудь дать мне руководство и инструкции по этому поводу?

Среда эксперимента должна быть на x86, а сборка генерируется из

gcc -S source

Предположим, у нас есть исходный код c в этой задаче, это может помочь?

1 ответ

Решение

Предполагая, что x86/x64 здесь...

Указатель стека отслеживается регистрами ESP (32 бита) или RSP (64 бита). Вы можете вставить mov ESP, ADDRESS введите ASM и измените стек в нужное вам место. Сначала вам нужно будет сохранить ESP/RSP в новом стеке, потому что он понадобится вам позже.

Сразу после настройки вызова ESP/RSP main() (или любая другая функция C в этом отношении) в программе C.

После возврата функции восстановите исходное значение ESP/RSP.

Другие вопросы по тегам