阅读:2004回复:13
能用SoftIce查看函数的参数吗?
我想分析一个驱动程序(无源码),用SoftIce对一个系统函数设断点bpx EngCreateBitmap,程序运行时被截获了,我怎样才能看到它调这个函数时EngCreateBitmap(a,b,c,...)用的那些参数a,b,c..?
|
|
沙发#
发布于:2002-04-03 09:22
在断点出来之后看堆栈啊!参数都在堆栈里面啊
|
|
板凳#
发布于:2002-04-03 09:51
在断点出来之后看堆栈啊!参数都在堆栈里面啊 sorry,我不会汇编,在SoftIce的code窗口里我看到 GDI32!EngCreateBitmap,但上一行是一个RET 0008,没有连续的压栈PUSH xxx,我应在那里看堆栈的内容? |
|
地板#
发布于:2002-04-03 10:03
在刚刚进入该函数的第一条指令还没有运行的时候堆栈寄存器ESP里面的值就是当前的堆栈指针,因为堆栈之后ESP的值会进行减操作
所以要往回看 |
|
地下室#
发布于:2002-04-03 12:29
假设把你的最左边的参数编号为1,向又依次为2,3,4,5…………
当你要看的函数返回以后,立刻中断,然后 d esp+4 显示出来的第一个32位数就是参数1,第二个就是参数2,………… btw,如果一点都不懂汇编,还是换个调试工具,或者打消跟踪别人程序的念头吧。 |
|
|
5楼#
发布于:2002-04-04 08:41
一个更简单的命令:
WL,既能看到参数,又能看到局部变量。 |
|
|
6楼#
发布于:2002-04-04 10:36
bpx EngCreateBitmap do *(esp+4)
这样在EngCreateBitmap停住后WD栏将现示依次为a,b,c.... |
|
|
7楼#
发布于:2002-04-04 16:42
前面的兄弟只说了一种情况,API函数有两大类,一类是堆栈型的,参数通过堆栈传递,按从右到左的顺序入栈;另一类是寄存器型的,参数是通过各寄存器传递的。具体到某个API如何传递参数,得看它的说明了。
|
|
8楼#
发布于:2002-04-04 20:53
要汇编好才能呀!
|
|
|
9楼#
发布于:2002-04-05 09:13
前面的兄弟只说了一种情况,API函数有两大类,一类是堆栈型的,参数通过堆栈传递,按从右到左的顺序入栈;另一类是寄存器型的,参数是通过各寄存器传递的。具体到某个API如何传递参数,得看它的说明了。 兄弟说得好,这就是还有一类__fastcall,是用EAX和EDX传递最左边的两个参数。不过好像一般Win32 API都是__stdcall,完全是用堆栈传递的。 |
|
|
10楼#
发布于:2002-04-05 09:41
要查看参数,必须设断点,然后在堆栈里查看,无其他办法。
|
|
|
11楼#
发布于:2002-04-05 15:28
不好意思上一贴错了应该为
bpx EngCreateBitmap do \"db esp+4\" 引号里是你想执行的ICE指令,如果你高兴改成HBOOT,哈哈!!后果自负! WINAPI 没见过用寄存器型! VXD倒是有! |
|
|
12楼#
发布于:2002-04-05 15:31
Lov1999终于把他哪个色情头象给换了^_^
:D :D :D :D :D :D :D :D :D :D :D :D |
|
|
13楼#
发布于:2002-04-05 23:00
to prn
http://www.pediy.com/document/Ice-Advance.chm 看一下这你的问题都搞定了! |
|
|