| 发表于:2007-11-22 11:00:333楼 得分:0 |
可以。 这是我抄别的人,没有深入研究: 看看高人是怎么说的: http://blog.csdn.net/linzhengqun/archive/2007/07/13/1688690.aspx unit unit1; interface uses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, stdctrls; type pstackframe = ^tstackframe; tstackframe = record prevframe : pstackframe; calleraddr: pointer; end; tform1 = class(tform) button1: tbutton; button2: tbutton; listbox1: tlistbox; procedure button1click(sender: tobject); procedure button2click(sender: tobject); private { private declarations } public { public declarations } end; var form1: tform1; implementation {$r *.dfm} procedure tform1.button1click(sender: tobject); var m_sbase: pstackframe; m_stop : pointer; begin asm mov m_sbase, ebp; mov m_stop , esp; end; while (dword(m_sbase) < dword(m_stop^)) do begin listbox1.items.add(format('0x00%u', [longint(m_sbase.calleraddr)])); m_sbase:= m_sbase.prevframe; end; end; procedure tform1.button2click(sender: tobject); var p: pchar; begin p:= nil; p^:= 'a'; end; end. | | |
|