Возможно ли использовать указатель стека для поиска/индексации локальных переменных в стеке с помощью llvm?

Я пытаюсь изменить бэкэнд llvm X86, чтобы использовать rsp для поиска/индексирования локальных переменных, а не rbp. Проблема в том, что смещение между локальными переменными и rsp не фиксировано, поэтому мне приходится его вычислять самому. С этим легко справиться, если местоположение rsp было изменено этими инструкциями следующим образом:

push 
pop
sub rsp, $immediate

В таких ситуациях я могу узнать смещение во время компиляции. Но сегодня я застрял в проблеме. Я обнаружил, что rsp модифицируется не только этими инструкциями, упомянутыми ранее. Например:

lstr = (char *)alloca(strlen(ss) + 1);

Эта инструкция изменит rsp таким образом, и я не могу знать смещение во время компиляции.

sub rsp, $register

Возможно ли использовать llvm для создания исполняемого файла, который использует указатель стека для поиска локальных переменных?


person ys z    schedule 27.05.2019    source источник


Ответы (1)


Краткий ответ: нет. Во многих случаях значение указателя стека может изменяться «непостоянно». Примеры включают VLA (прямые или через вызовы alloca()), функции с переменным числом переменных и т. д. Также обратите внимание, что в некоторых случаях стек может также динамически перестраиваться.

person Anton Korobeynikov    schedule 28.05.2019