在ARM ELF中分离全局内存访问和本地内存访问

在ARM ELF中分离全局内存访问和本地内存访问,arm,local,elf,globals,Arm,Local,Elf,Globals,我有一个手臂精灵。我想从每个函数的全局内存访问中筛选出本地内存访问。我可以通过编程方式对每个load/store指令进行解码,找出它所指的地址。有更简单的方法吗?定义本地访问和全局访问的含义?你说的是局部变量还是全局变量?如果局部变量是死代码的一部分,那么它们可以被优化为零,未优化它们位于堆栈上,因此很容易找到,全局变量位于.data或.bss中,因此在elf文件中很容易找到…对加载/存储指令进行解码无法达到目的您必须模拟指令集,您如何知道加载/存储是否与高级语言中的变量相关?局部变量指的是存在

我有一个手臂精灵。我想从每个函数的全局内存访问中筛选出本地内存访问。我可以通过编程方式对每个load/store指令进行解码,找出它所指的地址。有更简单的方法吗?

定义本地访问和全局访问的含义?你说的是局部变量还是全局变量?如果局部变量是死代码的一部分,那么它们可以被优化为零,未优化它们位于堆栈上,因此很容易找到,全局变量位于.data或.bss中,因此在elf文件中很容易找到…对加载/存储指令进行解码无法达到目的您必须模拟指令集,您如何知道加载/存储是否与高级语言中的变量相关?局部变量指的是存在于函数/线程堆栈和全局访问我指的是程序中由函数/线程共享的变量/内存位置。我知道我可以通过在.bss或.data部分中查找它们来获取所有全局变量。但它会给我一个程序中的所有全局变量。我只需要获取特定函数/线程使用的全局内存位置。您必须模拟并遵循所有嵌套和指针传递等,然后必须找出如何隔离函数。我见过gcc对两个函数使用相同的代码段,不是尾部优化,但这两个函数在功能上是相同的——它生成了一个,另一个生成了另一个的分支。