【发布时间】:2015-09-26 05:19:55
【问题描述】:
我知道,当第一次调用函数时,会调用 JIT 并将 .Net IL 代码编译为 x86 指令并将其保存在内存中的某个位置。 我需要知道这个 x86 代码的保存位置,以便我可以分析 x86 汇编指令(在这个问题的上下文中,目的并不重要。) 谁能告诉我如何确定存储已翻译代码的内存位置,或者可能是 JIT 代码中的哪个函数执行此操作。我有 JIT 代码(因为 .net 源代码已在 GitHub 上发布,但到目前为止我对代码的大小感到不知所措)。我将不胜感激任何形式的帮助。提前谢谢...
如果有人可以建议一个反汇编程序,它可以提供正在运行的 .net exe 的 x86 汇编指令转储,这将有所帮助,就像 Visual Studio 反汇编程序一样,但我需要自动运行它。我知道这可以由 ngen 静态完成。 ngen 可以转换为 x86 指令,然后任何反汇编程序都可以获得转储,但对我来说很重要的是,这必须在 exe 运行后完成。
这是因为我需要 x86 指令转储的原因是为了找到多个 .net exe 之间的相似性。直接查看静态拆卸程序集的挑战在于它可能被打包或混淆,在这种情况下,即使它们内部相似,它们也可能看起来不同。但在运行时,它们会被打包程序解包/去混淆,而 JIT 编译的 x86 指令看起来很相似。
【问题讨论】:
-
为什么需要内存位置?为什么不查看 Visual Studio 中的
Dissasembly窗口? -
删除对
[Java]的引用,因为这个问题是关于.NET的 -
这通常是不可能的,地址是高度随机的,从不重复。反恶意软件功能。只有剖析器有机会。避免问 XY 问题,“分析”没有任何意义,实际上在这种情况下是必不可少的。
-
@YuvalItzchakov 如果我能得到整个 exe 的 x86 反汇编,那就足够了,但我需要在没有人工干预的情况下完成它。这是因为我将在沙盒中运行它,其中包含几个 .net 文件并比较它们的 x86 汇编代码。是否可以使用包括 Visual Studio 在内的任何工具自动获取 x86 反汇编?
-
@HansPassan 实际上我需要查看 JIT 编译后生成的 x86 汇编指令。这是为了找到多个 .net exe 之间的相似性。直接查看 .net IL 的挑战在于它可能被打包或混淆,在这种情况下,即使它们在内部相似,它们也可能看起来不同。但是在 JIT 编译之后,它们的 x86 指令看起来很相似,即使它们之前被打包或混淆了