找出栈上的指针/引用
继续打捞一些零散的文字。这次是ItEye站内信里的一段对话。
下面是问题和回复内容,带补充。
===================================================================
问题
月初的时候收到这样一个问题:
off=88就是这个OopMap记录关联的指令在方法的指令流中的偏移量,这个数字是十进制的。
可以看到,该方法的指令流是从地址0x00007f3749ea3400开始的;十进制的88就是十六进制的0x58;
0x00007f3749ea3400 + 0x58 = 0x00007f3749ea3458,正好就是例子中callq指令后的inc %ebp所在的位置。
-------------------------------
再举几个例子。
LOCALS:0x0012f3f8 = 0x012b1d300x0012f3f4 = 0x000000000x0012f3f0 = 0x000000000x0012f3ec = 0x000000000x0012f3e8 = 0x000000000x0012f3e4 = 0x00000000<CLR reg> = 0x000000000x0012f3dc = 0x000000000x0012f3d8 = 0x000000000x0012f3d4 = 0x00000000
该栈帧里的局部变量的状态。等号左手边的是地址,右手边的是在这个地址里存的值。
可以看到这个例子里有9个被记录下来的局部变量是在栈上的,有1个是在寄存器里的。(具体是哪个寄存器这里没写。我印象中这个是ESI…不太肯定。