1

我正在尝试修改 llvm X86 后端以使用 rsp 来定位/索引局部变量而不是 rbp。问题是局部变量和rsp的偏移量不固定,只能自己计算。如果通过这些指令修改了 rsp 的位置,则很容易处理,如下所示:

push 
pop
sub rsp, $immediate

在这些情况下,我可以在编译时知道偏移量。但现在我陷入了一个问题。我发现 rsp 不仅被前面提到的这些指令所修改。例如:

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

该指令将像这样修改 rsp ,我不知道编译时的偏移量。

sub rsp, $register

是否可以使用 llvm 生成使用堆栈指针定位局部变量的执行文件?

4

1 回答 1

2

简短的回答:没有。在很多情况下,堆栈指针值可能会以“非常量方式”改变。示例包括 VLA(直接调用或通过 alloca() 调用)、可变参数函数等。还要注意,在某些情况下,堆栈也可以动态重新对齐。

于 2019-05-28T02:04:50.457 回答