问题标签 [executable-format]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
39 浏览

windows - 如何检测 LE(线性可执行文件)文件的架构?

LE(线性可执行)文件有什么指令集架构?链接的文章说:混合 16/32 位

  1. 这是否意味着同一个 LE 文件可以包含 16 位和 32 位代码?
  2. 如何检测它是否包含 16 位 (8086) 代码?
  3. 如何检测它是否包含 32 位 (i386) 代码?

请注意,我知道可以区分 80286 和 i386 (80386)的CPU 类型字段(请参见此处)。但是,我将此解释为 CPU 类型要求,因此未指定架构,例如,十六进制40在两者中均有效:它表示inc ax16 位代码和inc eax32 位代码,两者都可以通过80386 CPU。我对40LE 文件代码中的十六进制含义很感兴趣。

0 投票
0 回答
29 浏览

executable - 尝试运行程序时出现“执行格式错误”

首先,对不起我的英语!

操作系统:XUbuntu 虚拟机。

我正在尝试使用 clang-9 编译带有 Makefile 的可执行文件。

我最初遇到了一个权限被拒绝的错误。用 chmod 修复它。

现在,当我运行以下命令时:

(这是有问题的可执行文件)

我收到以下错误:

我无法找到原因。

谢谢。

0 投票
2 回答
68 浏览

r - 如何制作R可执行文件

是否可以创建一个可执行文件,我可以在其中上传excel,并根据编码生成输出,而不共享它。

0 投票
1 回答
223 浏览

linux - ELF 可执行文件:许多零字节

介绍

我正在编译一个简单的汇编代码(Intel 语法,x86,Linux),打印“Hello World!”。这里是:

我使用以下命令编译它:

代码工作得很好,但我关心的是文件大小:

问题

目标文件比源代码略大,但这似乎是合理的,因为 ELF 文件中应该有一些元数据或某些东西,而源代码不包含这些,对吧?但可执行文件甚至比目标文件大 10 倍以上!

此外,目标文件中有一些零字节,但我不会说它们太多。但是,可执行文件中有很多零(参见本Additional info节中两者的屏幕截图)。

调查

我尝试阅读一些关于 ELF 的文章,包括 Wikipedia 和手册页。我没有仔细阅读所有这些,所以我可能遗漏了一些东西,但我发现有用的是dumpelf实用程序(来自pax-utils包,可通过安装apt),我使用它转储了我的 elf 文件并发现了一些可能是这些零流的原因:

在可执行文件的所有三个标头中都有p_align字段集:

这应该意味着每个部分都应该用零字节填充,以便其长度是 4096 的倍数。并且因为以下每个部分的大小都相对较小,所以要添加很多零字节,那就是这些零是从哪里来的。

问题)

所以,我想知道:

  1. 我对吗?是否添加了这些零字节以使这些部分足够长?

    我还注意到前三个部分('''.rodata''.text')分别从04096和开始8192,但后面的部分('.symtab''.strtab''.shstrtab')似乎不再对齐:它们从820883688422...... 为什么?这里发生了什么?

  2. 我们需要这种对齐有什么用?在编程头文件中,有p_vaddrp_paddr字段设置为前三个部分开始的地址,那么如果我们已经从头文件中知道了部分的确切地址,那么对齐部分的原因是什么?它与内存页面(我的机器上的大小为 4KiB)有关吗?

  3. 我什么时候想要/需要,以及如何更改对齐值?看起来应该有一个链接器参数来更改这个值。我--nmagic在手册中找到了这个参数ld,它完全禁用了对齐(而且,万岁!,可执行文件没有与目标文件相同的大小),但我猜对齐是故意存在的,所以也许我只需要降低价值,使其更适合我的情况?

如果您知道我错过的任何事情,我将非常感谢您回答这些问题或任何其他细节。另外,请告诉我我是否在任何地方错了。先感谢您!

附加信息

我的目标文件的转储(带有xxd hello_world.o | grep -E '0000|$' --color=always | less -R):

hello_world.o 的十六进制转储

我的可执行文件转储的一部分(使用类似于上面的命令):新部分从地址 0x1000 开始

hello_world 的十六进制转储

输出dumpelf hello_world.o

输出dumpelf hello_world

0 投票
0 回答
161 浏览

binary - 为什么可执行文件称为“图像文件”?

我正在阅读PE 格式的文档。在文档中,“image”这个词出现了很多次,而且似乎总是伴随着“executable”这个词出现。但是,它没有解释为什么“可执行文件”被称为“图像文件”。

维基百科上有一个页面条目列表,其中几个术语包含“映像”,例如“磁盘映像”、“ISO 映像”,甚至是“可执行文件”的链接,但仍然没有解释“映像”在这样的上下文。

谷歌搜索后,我发现这个网站对“图像”给出了合理的解释:

(1) 在计算机科学中,图像是存储在第二个存储设备上的存储设备(例如硬盘驱动器或 CD-ROM)内容的精确复制品。另请参阅磁盘映像。

那么,假设“ISO 映像”是光盘内容的精确副本,那么“可执行映像”是什么的精确副本?为什么可执行文件称为“图像文件”?

0 投票
0 回答
7 浏览

image - 转换旧的 Miniviewer 图像

我有旧扫描的 msdos 可执行映像文件,扩展名为 .exe 格式(不是通常的图像扩展,如 .tiff、.gpeg...)。我可以在 windows xp 中使用“image Miniviewer”打开它。我想隐藏它,以便可以在 Windows 7 中打开它,我尝试在 xp 中打印为 pdf,但结果是 pdf 图像失真。请提供任何帮助。我只找到通常图像扩展的解决方案。如果我知道这种应用程序编码,即使是旧 Miniviewer 上的文档也很少见,我可以在最坏的情况下反转并提取图像数据。