有没有办法比较两个.exes,看看它们之间有什么不同?

时间:2014-04-24 16:30:29

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

我是否有一个工具/流程可以反编译两个.exes(其中一个在手持设备上运行,另一个在不运行),这样我就能看到有什么不同/什么问题可能是?

当然,看到那个人有" 00xA"另一方有" 00xB"不会帮助我。我的意思是一种方法来查看不同的代码,或者更可能是编译资源或配置文件差异,或某些构建选项左右?

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

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

更新

回复:this page,我不熟悉某些术语;特别是,它谈论了一个" FLATRELEASEDIR" - WTH?

这可以在我的电脑上测试我的CE绑定* .exe:

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

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

**"绑定"如同,"它在哪里?#34;

更新2

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

enter image description here

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

更新3

以下是我尝试尽可能在PC上复制掌上电脑环境所做的工作:

我想复制整个爸爸烧过的东西(来自Windows资源管理器的整个手持设备代表),但它不会让我这样做 - 它不可复制,所以我复制了只是" Program Files"文件夹(包含我的应用程序的子文件夹和其他一些我不知道的标准或自定义/特殊文件夹)。

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

然而,它并没有;我得到的结果与上面的p [a,o]相同。

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

因此,即使是一个运行良好测试的.exe,因为它没有为CE时间做好准备&#34;,如何使用它来准确测试哪些必要文件丢失?

我是否还需要复制其他文件夹或什么?

更新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

如果为true,那么为什么.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

&#34; Program Files&#34;文件夹有一个&#34; .NET Compact Framework&#34;子文件夹,但它是空的。

在\ 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

另一个奇怪的是:

阅读完本文后:&#34;安装在GAC中的文件进入\ Windows目录&#34;在书中,#34; Microsoft .NET Compact Framework&#34;通过Andy Wiggly等人,我尝试将Windows文件夹从手持设备复制到我的电脑上名为&#34; 3910ProgramFilesFolderCopy&#34;的文件夹下的位置。在资源管理器中看起来像这样:

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之前复制一些文件(电子书,也就是说),它告诉我,&#34;系统找不到指定的文件&#34;

Heavens to Murgratroid!?!为什么会找到一些但不是全部?在Windows资源管理器中查看掌上电脑中的Windows文件夹,我发现许多珍贵的DLL都是灰色的:

enter image description here

Arggh,双重arg和(&amp; c)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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