1.exe应用程序怎么查看里面的源代码
2.从零开始,学习windows编程 - hello.c的疑惑!
exe应用程序怎么查看里面的源代码
扩展名为exe 的文件来源很多,可以是VB 、VC、 VF、瓦片源码Delphi等不同的软件编译生成的,不同的环境应该用不同的反编译工具,具体的工具可在网上查询下载到。
Windows软件开发工具包(SDK)提供一个叫做 DUMPBIN 的极有用的工具,它有许多有助编程分析的功能. 其中包括反编译功能,反编译命令格式:
dumpbin /DISASM 你的文件.exe
DUMPBIN 详细用法参考,可到微软件公司网站查询介绍。
从零开始,云监控源码php学习windows编程 - hello.c的疑惑!
现在我们拥有一个名为hello.c的文件,只需通过cl命令,即可生成目标文件hello.exe。
接下来,让我们深入了解cl这个工具。
CL解释
CL.EXE(或cl.exe),在Windows系统中对于大小写不敏感,是微软C和C++编译器及链接器的控制器。它执行两步操作:编译器生成COFF格式的目标文件(.obj),链接器则生成可执行文件(.exe)或动态链接库文件(DLLs)。
对比过去的idea查看spark源码方法,我们确实通过cl命令生成了一个hello.obj文件和一个hello.exe文件。
选项的使用
cl命令提供了超过个选项,每个选项都有特定作用,需在实际使用时熟悉。我们只需关注/c选项。
该选项阻止自动调用链接器。编译时使用/c选项,仅生成.obj文件。若要执行链接阶段,需显式调用链接器并提供适当文件和参数。内部项目在开发环境中默认使用/c选项。在Visual Studio环境中设置此选项。波形静音病毒源码此选项不适用于开发环境内部使用。在程序中设置此选项。此选项无法编程更改。
理解它,需要掌握C语言从源码到目标代码的过程。
首先,C语言包含两种文件:源文件(c扩展)和头文件(h扩展)。头文件通常被源文件包含,源文件编译为二进制中间文件。所有中间文件通过链接器链接,形成可在特定系统上执行的二进制可执行文件。
因此,源码获取手机版C语言编译过程可明显分为编译和链接阶段,其中“宏”这一特殊语法的存在导致了预编译过程。在预编译过程中,C语言中的宏被展开;同时,包含的头文件代码根据条件编译等整合到源文件中。完成后,给编译器的是一份新的源文件,供编译阶段使用。
值得注意的是,C语言起源于汇编语言,早期的编译器将C语言编译为汇编语言,再解释为机器码。现代编译器除了这一基本思想,还对代码进行优化。
在C开发中,查看汇编代码能加深对计算机执行程序过程的了解。
cl命令可生成汇编代码。输入cl /FA hello.c,生成.obj文件和.asm文件。
要生成汇编代码,请加上/c选项。可见生成了.obj文件和.asm文件。
.asm文件包含汇编代码,仅通过cl编译生成.exe文件,方法尚未发现。引入新工具ml,用于MASM汇编代码编译,同样会调用link,并使用/c选项。
总结了cl、hello.c与生成的文件,我们了解了C语言到可执行文件的全过程,包括链接过程。
链接过程将.obj文件转换为.exe文件,使用link.exe完成。
使用cl /c hello.c产生的hello.obj文件,通过link hello.obj直接生成了.exe文件。
程序中出现main函数,但printf函数如何加入?答案隐藏在生成的.obj文件中。若使用另一个.obj文件,会遇到错误。
我们打开.obj文件,检查二进制内容。看不懂二进制?不用担心,查看的是英文字符。通过此方法,我们了解了链接过程,如何将所有静态库和目标文件链接在一起。
链接过程包含在hello.obj文件中的信息,指定为默认lib libc.lib 和 oldnames.lib。libc.lib是单线程静态C标准库,在cl中通过/ML选项定义链接。oldnames.lib是微软C/C++开发系统兼容库,基本不再使用。
通过dumpbin分析hello.obj文件,了解默认库,而无需打开文件查看。
总结所有工具:CL.EXE、LINK.EXE、ML.EXE、DUMPBIN.EXE和WINHEX。
了解MSVC和GCC在C/C++编译过程中的差异。
了解MSVC与GCC的文件后缀名。