能力值:
( LV2,RANK:10 )
|
-
-
2 楼
1、程序处于运行状态则表明该call内的代码正在执行着,还执行不到call的下一句。比如
00401000 call 00401010
00401005 mov eax,ebx
……
00401010 push ebp
……
……
401000出执行完菜会执行401005处的代码
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
可能是Call一个模态对话框什么的,必须要点一下,函数返回才继续。
系统里同一dll 同一时刻只会留一份在内存中吧。。。我是菜鸟,请高手纠正。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个机制是怎么实现的,程序怎么知道哪个call单步到会执行,哪个call可以单步走过。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
晕,不是程序控制的,是人编写的代码控制的,要机器运行到哪里就到哪里。你可以设计了从一个call进去就直到程序结束。
这样说吧:call是一个子程序,你所有的功能都在这个call里,包括程序的结束,那么这时候你如果单步步过,程序就跑起来了,代码就断不下来,所以你只能单步步入。或者说,单步步过是在call的下面一句代码下断点,单步步入是在call(其实也是JMP)的目的地址下断点,断点不同,当然结果不同。这样可能好理解些。
第二个问题涉及基本概念了,你可以去找一下。所有PE结构载入到内存中都是以基址+偏移地址表示。相同的DLL被不同的程序调用时,它的基址会不同,但dll中每段代码的偏移地址是相同的。当然还是看大牛们图文并茂的解释会更清楚
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
看了一些,也自己动手去查了一些,大致也一样。
|
|
|