Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 其中函数名存储在ARM7l的堆栈帧中(不是链接寄存器“lr”中的函数地址)_C_Linux_Unix_Arm - Fatal编程技术网

C 其中函数名存储在ARM7l的堆栈帧中(不是链接寄存器“lr”中的函数地址)

C 其中函数名存储在ARM7l的堆栈帧中(不是链接寄存器“lr”中的函数地址),c,linux,unix,arm,C,Linux,Unix,Arm,任何人都可以告诉我函数名存储在堆栈框架中的什么位置吗。我知道返回地址存储在链接寄存器(lr)中。但我的要求是实现回溯,它打印我不想打印函数地址的函数名。有两个APIbacktrace()和backtrace\u symbols()可用于打印回溯信息。有关这两个API的更多详细信息,请使用manbacktrace 函数名称,我不认为它是保存在堆栈框架中,需要参考地图信息/符号表来找到它。地址:C/C++函数名中的< /P> < P>不存储在堆栈帧中。 < P>可以使用预处理器符号: \uuuuuu

任何人都可以告诉我函数名存储在堆栈框架中的什么位置吗。我知道返回地址存储在链接寄存器(lr)中。但我的要求是实现回溯,它打印我不想打印函数地址的函数名。

有两个API
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()