首页
社区
课程
招聘
[旧帖] [讨论]获取.NET软件动态执行轨迹 0.00雪花
发表于: 2008-1-10 16:53 2899

[旧帖] [讨论]获取.NET软件动态执行轨迹 0.00雪花

2008-1-10 16:53
2899
我素知看雪的大牛们那是相当的牛!

情景:
a)假定一个方法A()执行时需要几个输入。
b)给定一个输入集合inputs,方法A()开始执行,在执行过程中A调用了方法B和C,B又调用了方法D,E,C调用了E...然后执行完毕。
               A
             /    \
           B      C
          /  \   /
        D     E
请问怎么样获取这个动态的调用轨迹?

这里还有三个条件:
1、要检测的方法是属于一个已经编译好的软件中的一部分,故不可以通过在每个方法中添加log来跟踪;
2、必须是动态的跟踪,不可通过反编译成IL代码或者微软提供的一个现成的“CLRProfiler”工具来静态获得;
3、也不可通过多次输入同样的输入集合,每次截获JITCompilationStarted来归纳出可能的轨迹。因为jit编译是每次一方法,这样也跟静态获取差不多了。

我的一个猜测、想法:
请问当IL代码被JIT编译成本地代码并存储在内存中以后,是不是此时的执行就跟本地程序的执行过程一样了?此时,如何截获方法A调用了方法B、C呢?(如果是第一次调用JIT编译,我知道是可以通过Profiler来截获的)
是不是可以在JIT之后在Executive Engine执行方法之时截获每个方法到底调用了什么其他方法呢?
是.NET的执行引擎(EE)负责JIT之后的执行过程吗?那是否可以截获EE来获得执行轨迹呢?具体又如何做呢?
呵呵,不好意思,问了你很多问题。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 5275
活跃值: (496)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=shuxuefen;403382]
微软提供的一个现成的“CLRProfiler”工具来静态获得;
[QUOTE]

Profiler是动态的,也是完成这个任务的最好方法。会得到一个call链表的,正是楼主需要的结果。
2008-1-10 19:20
0
游客
登录 | 注册 方可回帖
返回