C 其中函数名存储在ARM7l的堆栈帧中(不是链接寄存器“lr”中的函数地址)
任何人都可以告诉我函数名存储在堆栈框架中的什么位置吗。我知道返回地址存储在链接寄存器(lr)中。但我的要求是实现回溯,它打印我不想打印函数地址的函数名。有两个APIC 其中函数名存储在ARM7l的堆栈帧中(不是链接寄存器“lr”中的函数地址),c,linux,unix,arm,C,Linux,Unix,Arm,任何人都可以告诉我函数名存储在堆栈框架中的什么位置吗。我知道返回地址存储在链接寄存器(lr)中。但我的要求是实现回溯,它打印我不想打印函数地址的函数名。有两个APIbacktrace()和backtrace\u symbols()可用于打印回溯信息。有关这两个API的更多详细信息,请使用manbacktrace 函数名称,我不认为它是保存在堆栈框架中,需要参考地图信息/符号表来找到它。地址:C/C++函数名中的< /P> < P>不存储在堆栈帧中。 < P>可以使用预处理器符号: \uuuuuu
backtrace()
和backtrace\u symbols()
可用于打印回溯信息。有关这两个API的更多详细信息,请使用manbacktrace
函数名称,我不认为它是保存在堆栈框架中,需要参考地图信息/符号表来找到它。地址:C/C++函数名中的< /P> < P>不存储在堆栈帧中。
< P>可以使用预处理器符号:\uuuuuuuuuuuuuuuuuuuuuuuu
和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu
类似于:printf(“文件:”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu代码>
这将返回当前文件和调用函数的行。请注意,字符串存储在内存中。所以不要经常用这个来表达 是的,我正在x86体系结构上使用backtrace()
和backtrace\u symbols()
工作,但我希望它用于ARM体系结构。inbuild library不支持这一点。inbuild library是什么意思?@BhavithCAcharya如果您使用binutil工具,例如readelf-a
,对于ARM,它应该类似于ARM poky linux gnueabi readelf
,您会发现函数名保存在.symtab部分,带有值,也许它会给你们一些关于如何实现的线索。我很确定函数名永远不会存储在堆栈上。提供有关如何手动执行此操作的详细信息;这不是罐装溶液,所以听起来好像不适合你。您还可以使用/proc/self/stack
(如果存在)来查看任务的内核调用堆栈。这取决于内核的.config
选项。可能存在的重复,以及如何使用堆栈帧信息(如backtrace\u symbols()