例如,如果路径上有多个可执行文件,即a.exe,a.bat和用户输入'a'(输入),哪个文件将执行?
Windows支持哪些其他可执行格式?
\n\n\n\n\n可能的重复:
\n
\n 为什么编译的 Java 类文件比 C 编译的文件小?
出于好奇,我刚刚用 C、C++ 和 Java 编译了“Hello Worlds”。
\n\nJava 类文件非常精简,只有 423B,据我所知,因为运行时不包含在二进制文件中。
\n\n然而,C 和 C++ 的大小是 8.5K 和 9.2K。
\n\n为什么它们相对较大?\n我总是假设 stdio 或 iostream 是动态链接的,并且不会增加可执行文件的大小。
\n\n那么所有千字节从何而来?\n通过查看十六进制转储,我发现有很多填充,我猜是出于性能原因。为什么二进制格式是这样组织的?
\n\npmg的链接非常有帮助!
\n\n关于填充,我发现程序段与虚拟内存页面边界(4096 字节)的对齐导致它至少为 8192 字节。
\n\n关于 mach-o 二进制格式(适用于 OS X 和 iOS)
\n\n\n\n\n\n\n为了获得最佳性能,对于 PowerPC 和 x86 处理器,段应在虚拟内存页边界 \xe2\x80\x944096 字节上对齐。要计算段的大小,请将每个段的大小相加,然后将总和向上舍入到下一个虚拟内存页边界(4096 字节或 4 KB)。使用此算法,段的最小大小为 4 KB,此后以 4 KB 增量调整大小。
\n
我会在下次询问之前先做一下研究;)
\n在十六进制编辑器中查看 PE 文件时,我经常遇到节表和第一节之间的一些字节,这对我来说没有意义。就我而言,应该有一个 00 字节的填充以适应对齐。但是,这是一个屏幕截图,它演示了相反的情况:
事实证明,突出显示的块几乎是绑定导入表。但我仍然很困惑。为什么这个表不在一个节中?这是总是如此还是只是某个编译器/链接器的规范?我没有找到有关此特定问题的任何文档。关于这个主题的所有内容基本上都说:
... 等等
在我遇到这个问题之前,我什至不知道这些部分之外可能还有其他东西(当然,除了我上面列出的那些)。
[编辑]
概念证明(因为 Mox 不相信我):

在shell中,有什么区别?
. executable
Run Code Online (Sandbox Code Playgroud)
和
./executable
Run Code Online (Sandbox Code Playgroud)
在第一个中,点是一个快捷方式source吧?那么./executable和之间有区别source executable吗?
我有三个用C编写的文件:
a.c, b.c, d.c
Run Code Online (Sandbox Code Playgroud)
我想使用ONE Makefile从它们生成独立的可执行文件,如下所示:
a.x, b.x d.x.
Run Code Online (Sandbox Code Playgroud)
他们不需要彼此奔跑.它们是完全不同的程序.
我知道,我可以编写一行来编译它们中的每一个,如下所示:
gcc -Wall -Werror a.c -o a.x
gcc -Wall -Werror b.c -o b.x
gcc -Wall -Werror d.c -o d.x
Run Code Online (Sandbox Code Playgroud)
但是我正在寻找一种更简单的解决方案,可以独立于文件数量来实现这一点,因为将来我将拥有很多文件.
我的原件看起来像这样:
CC = gcc
CFLAGS = -g -Wall - Werror -03
%.x:%.c
${CC} {CFLAGS} -o $@ $<
clean:
rm -f *.o
Run Code Online (Sandbox Code Playgroud)
但我不知道,如何自定义它,以便它读取我的每个c文件并从它们中的每一个生成一个x文件.
谢谢
如果我在操作系统(例如:Windows)中创建一个 C 可执行文件,该文件是否可以在其他操作系统(例如:Linux、Mac-OS)上运行。
我开始在安装了 cygwin(Python 2.7)的 Windows 7 x64 机器上开发一个小的 pdf 到 jpg 脚本。以下工作完美:
import subprocess
filename = "test"
subprocess.check_output('gs -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o ' + filename + '-2800-%03d.jpg ' + filename + '.pdf', stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
在我的 Windows 10 x64 非 Cygwin 机器(Python 2.7)上拉取此项目后,此代码错误,因为它不再将“gs”识别为 ghostscript 的内置缩写。所以我尝试以下操作:
import subprocess
filename = "test"
subprocess.check_output('C:\Program Files\gs\gs9.20\bin\gwin64c.exe -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o ' + filename + '-2800-%03d.jpg ' + filename + '.pdf', stderr=subprocess.STDOUT)
WindowsError: [Error 2] The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
好吧,我是初学者,在这里犯了一些明显的错误。"\b"中间的字符也.20\bin\被突出显示......向我表明我不知何故没有明确这是一条单一的路径。
我也尝试过的事情(单独运行): …
如何查看有关 MacOS 二进制文件的一些基本信息,特别是用于构建它的内容、链接的框架以及它使用的系统调用?
我试过了nm,otool -L但他们的输出只是部分有用。
例如,什么表明二进制文件是使用 xcode 或 golang 编译器构建的?
注意。我对逆向工程 macos 二进制文件不感兴趣。我只想使用已包含在 OOTB 中的工具更好地了解我的系统上运行的内容。
您好,我无法从我的项目(.NET Core 2.1控制台应用程序)生成可执行文件。我已经检查了输出文件,输出类型为控制台应用程序。它构建成功(程序可以正常运行),但是没有可执行文件。
我曾与调试和释放的尝试都和我已经调查bin\和obj\文件夹为可执行文件却是没有。
这是我的Bin的样子:
我调查了一下Properties->Application,一切都设置好了,但仍然没有可执行文件。
例如,我有两个 C 二进制可执行文件。如何确定两者是否使用相同的源代码生成?
executable ×10
c ×4
windows ×3
.net ×1
bash ×1
binaryfiles ×1
build ×1
c++ ×1
cmd ×1
coff ×1
command-line ×1
java ×1
linux ×1
mach-o ×1
macos ×1
makefile ×1
python-2.7 ×1
shell ×1
subprocess ×1