|
发表于 2007-12-18 15:48:59
|
显示全部楼层
要获得调用者的地址,知道堆栈的格式就可以了
+---------------------------+ (高地址)
+_参数1____________+
+---------------------------+
+_参数2____________+
+---------------------------+ 参数的顺序依赖于调用方式
+_参数_____________+
+---------------------------+
+_参数N____________+
+---------------------------+
+_eip______________+ 返回本次调用后,下一条指令的地址
+---------------------------+
+_ebp_____________+ 这里保存的调用者的ebp
+---------------------------+
(ebp 指向这里:相当于调用者和被调用者的分界线)
+----------------------------+
+_临时变量1_________+
+----------------------------+
+_临时变量2_________+
+----------------------------+
+_临时变量.__________+
+----------------------------+
+----------------------------+
+_临时变量N_______+
+----------------------------+(低地址)
由于优化、调用方式、编译器的不同,上述布局部可能有所不同,但一般来说,第一个局部变量前是调用者的ebp,ebp前是返回后下一条指令的地址。
由地址转换到对应文件以及行号倒有些麻烦 |
|