【发布时间】:2017-02-01 02:05:54
【问题描述】:
如何通过查看 objdump 文件来了解寄存器溢出?
我的想法是它可以通过跟踪堆栈指针来完成:将sp 移动到函数序言和结尾之外,表示寄存器溢出。
我想知道哪些代码行造成寄存器溢出。另外,恢复的寄存器在哪里指向全局变量,也是堆栈?
【问题讨论】:
标签: optimization compiler-construction cpu-architecture
如何通过查看 objdump 文件来了解寄存器溢出?
我的想法是它可以通过跟踪堆栈指针来完成:将sp 移动到函数序言和结尾之外,表示寄存器溢出。
我想知道哪些代码行造成寄存器溢出。另外,恢复的寄存器在哪里指向全局变量,也是堆栈?
【问题讨论】:
标签: optimization compiler-construction cpu-architecture
寄存器溢出不需要移动堆栈指针,局部变量可能会溢出到堆栈并在当前帧中直接从那里直接使用,编译器将只使用堆栈帧及其偏移量而不是一个寄存器。
您最好的选择就是寻找不断被读取和/或写入的内存地址。这甚至可能发生在由于编译器缺陷导致周围有可用寄存器的情况下,或者无法证明没有其他线程/代码单元正在通过 addr 访问某个局部变量(例如,如果变量地址被复制到超出范围的某个地方)。在这种情况下,需要在内存中维护该变量。
【讨论】: