【问题标题】:Is there a way to compare two .exes to see what differs between them?有没有办法比较两个 .exe 以查看它们之间的不同之处?
【发布时间】:2014-04-26 05:21:39
【问题描述】:

是否有一个工具/进程可以让我反编译两个 .exe(其中一个在手持设备上运行,另一个不在手持设备上运行),以便我可以了解不同之处/问题可能是什么?

当然,看到一个有“00xA”而另一个有“00xB”对我没有帮助。我的意思是一种查看不同代码的方法,或者更有可能是编译资源或配置文件的差异,或者一些构建选项等等?

我几乎可以肯定,这个问题与代码本身(if/while/switch 语句等)无关,而是与项目设置有关。

我无法比较工作源,因为它不存在 - 我只有它来自的 .exe。我可用的来源是它的“合理传真”,但不完全相同,至少在项目设置和配置等方面不完全相同。

更新

回复:this page,有些术语我不熟悉;具体来说,它在哪里谈论“FLATRELEASEDIR” - WTH?

这是否可以在我的 PC 上测试我的 CE 绑定* .exe:

Run depends.exe*
Open my CE-bound** .exe
Stare in wonder at the amazing plethora of errata and data

?

*据说不要与“成人纸尿裤”混淆

** "绑定" 如"这就是它的去向"

更新 2

这是我在我的应用上运行 Dependency Walker 时看到的内容:

...但请注意我的困境here

更新 3

为了尽可能在我的 PC 上复制我的手持环境,我做了以下工作:

我只想复制整个爸爸烧掉的东西(Windows 资源管理器中的整个手持设备表示),但它不允许我这样做 - 它不可复制,所以我只复制了“程序文件”文件夹(其中包含我的应用程序的子文件夹和我不知道对我们来说是标准或自定义/特殊的几个其他文件夹)。

这是来自有问题的 .exe 运行正常的手持设备,所以显然(理论上?)不应该缺少模块 - Dependency Walker 应该运行它并说一切都很好。

但是,它没有;我得到的结果与上面的 p[a,o]sted 相同。

注意:即使在选择“选项 > 配置模块搜索顺序... > 应用程序目录 > 在 Dependency Walker 中上移”后也是如此。

因此,即使是运行良好的 .exe 测试也显示为“还没有为 CE 时间做好准备”,我如何使用它来准确测试缺少哪些必要的文件(如果有的话)?

我还需要复制其他文件夹吗?

更新 4

那么,(据说?)缺少的模块是:

API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL
DCOMP.DLL
GPSVC.DLL
IESHIMS.DLL

如果属实,那为什么 .exe 会在手持设备上运行?

注意:掌上电脑上的其他文件夹有:

Application Data => only contains "desktop.ini"
BTExplorer
My Documents => contains a "desktop.ini" and several SQLCE databases (*.SDF)
profiles => contains an empty "default" folder
Recycled => contains a single ".lnk" file
Temp => contains a handful of ".tmp" files
Windows => contains a slew of folders and files, including several .DLLs, but none of those listed above

“Program Files”文件夹有一个“.NET Compact Framework”子文件夹,但它是空的。

在\Windows\AppMgr文件夹中,有一些有趣的文件,比如:

Microsoft .NET Compact Framework.DAT
Microsoft .NET Compact Framework.DLL
...several other DAT/DLL pairs, including:
Symbol Managed Class Libraries.DAT (no corresponding DLL)
...and even a pair:
SSCS HHS.[DAT,DLL]

--这是我们公司的缩写(SSCS)和项目名称(HHS)

是什么产生了这些?从哪里引用它们??

另一个可能的难题是 .exe 在其上工作的手持设备没有 \Windows\AppMgr 文件夹,因此没有那些 .DAT/.DLL上面列出的文件...

更新 5

另一个怪事:

阅读此内容后:Andy Wiggly 等人的“Microsoft .NET Compact Framework”一书中的“安装在 GAC 中的文件进入 \Windows 目录”,我尝试将 Windows 文件夹从手持设备复制到在我的电脑上找到名为“3910ProgramFilesFolderCopy”的文件夹下方,在资源管理器中如下所示:

C:
    3910ProgramFilesFolderCopy
        Program Files
        Windows <= tried to copy the "Windows" folder from the handeld on top of "3910ProgramFilesFolderCopy" so it would end up here

...但它只在 borborygmas 发生之前复制了几个文件(即电子 borborygmas),它告诉我,“系统找不到指定的文件”

Heavens to Murgratroid!?!为什么它会找到一些但不是全部?在 Windows 资源管理器中查看手持设备上的 Windows 文件夹,我看到许多宝贵的 DLL 都变灰了:

Arggh、双参数和 (&c)

【问题讨论】:

  • 你指的是什么手持设备?
  • 它们是摩托罗拉/Symbol 3090 和 3190
  • 哎呀,我希望 iPhone 或 android 回答 :) wavelink.com/Motorola%20(Symbol)-MC9000-Emulators-downloads 提供摩托罗拉模拟器。我会尝试使用其中一个将 exe 文件放在模拟器上,然后在那里检查它。不确定。
  • “哎呀”不是它的一半。

标签: configuration windows-ce embedded-resource decompiler file-comparison


【解决方案1】:

对于 PC,您可以尝试 .NET Reflector。
http://www.red-gate.com/products/dotnet-development/reflector/

【讨论】:

    【解决方案2】:

    您可以尝试使用依赖漫游器来了解他们需要的 DLL/API,并检查您的设备是否支持这些 DLL/API。 http://geekswithblogs.net/WindowsEmbeddedCookbook/archive/2011/02/02/using-dependency-walker.aspx

    【讨论】:

    • Dependency Walker 解析 PE 标头(在 CE 和 Win32 上相同)并尝试在本地计算机上查找 DLL。在 CE 中,只有第一级依赖项是正确的(如文章中所述)。如果您可以自己构建操作系统映像(不是 WM 设备的情况),您可以将 exe 移动到所有 .exe 和 .dll 所在的文件夹并进行更完整的检查。您无法从正在运行的设备中提取系统 DLL,它们通常是隐藏的(这就是它们在资源管理器中显示为灰色的原因)。
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多