|
|
|
|
 请教arm平台上gdb的bt命令的工作原理和流程 - momou [ 2007-08-15 13:19 | 575 byte(s)]
 Re: 请教arm平台上gdb的bt命令的工作原理和流程 - ovis_poly [ 2007-08-15 23:45 | 251 byte(s)]
 Re: 请教arm平台上gdb的bt命令的工作原理和流程 - teawater [ 2007-08-15 23:41 | 107 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
这里强调了arm平台,主要是因为在堆栈回朔的时候,arm平台传参时候默认使用了4个寄存器传递参数而没有如x86一样使用堆栈传参。
对于一种编译器的实现,参考编译器的习惯加上fp基本上stack frame的回朔可以分析出来,只是分析各个函数调用时的参数就比较麻烦,现在的一种想法是“逆向模拟执行代码”从而回朔到函数的入口处得到执行到函数入口点当时的寄存器值。
这个想法还没有实际操作。请各位给点意见。
又考虑到gdb的bt命令在arm上仍然工作的很好,想请教熟悉gdb实现的达人给指点一下,希望有所启发。
自己在gdb的源码里面翻了一阵子,不得要领。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
所有平台的BT都一样 都是对stack frame不断的分析来实现 解析过程可以看看我写的 移植GDB(1) 里面有比较详细的介绍
|
|
|
----
科学家会武术 流氓都挡不住
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
GDB使用一种叫做prologue analysis的技术。和你的想法差不多吧
分析prologue,从而了解寄存器值的变化过程,也就能还原最初进入函数时的值,也就得到了函数参数的值。
我没有分析过源代码,但是基本原理就是这样的。gdb internal 里面有详细一些的描述
|
|
|
[Original]
[Print]
[Top]
|
|
|