问题标签 [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.
windows - 如何检测 LE(线性可执行文件)文件的架构?
LE(线性可执行)文件有什么指令集架构?链接的文章说:混合 16/32 位。
- 这是否意味着同一个 LE 文件可以包含 16 位和 32 位代码?
- 如何检测它是否包含 16 位 (8086) 代码?
- 如何检测它是否包含 32 位 (i386) 代码?
请注意,我知道可以区分 80286 和 i386 (80386)的CPU 类型字段(请参见此处)。但是,我将此解释为 CPU 类型要求,因此未指定架构,例如,十六进制40
在两者中均有效:它表示inc ax
16 位代码和inc eax
32 位代码,两者都可以通过80386 CPU。我对40
LE 文件代码中的十六进制含义很感兴趣。
executable - 尝试运行程序时出现“执行格式错误”
首先,对不起我的英语!
操作系统:XUbuntu 虚拟机。
我正在尝试使用 clang-9 编译带有 Makefile 的可执行文件。
我最初遇到了一个权限被拒绝的错误。用 chmod 修复它。
现在,当我运行以下命令时:
(这是有问题的可执行文件)
我收到以下错误:
我无法找到原因。
谢谢。
r - 如何制作R可执行文件
是否可以创建一个可执行文件,我可以在其中上传excel,并根据编码生成输出,而不共享它。
linux - ELF 可执行文件:许多零字节
介绍
我正在编译一个简单的汇编代码(Intel 语法,x86,Linux),打印“Hello World!”。这里是:
我使用以下命令编译它:
代码工作得很好,但我关心的是文件大小:
问题
目标文件比源代码略大,但这似乎是合理的,因为 ELF 文件中应该有一些元数据或某些东西,而源代码不包含这些,对吧?但可执行文件甚至比目标文件大 10 倍以上!
此外,目标文件中有一些零字节,但我不会说它们太多。但是,可执行文件中有很多零(参见本Additional info
节中两者的屏幕截图)。
调查
我尝试阅读一些关于 ELF 的文章,包括 Wikipedia 和手册页。我没有仔细阅读所有这些,所以我可能遗漏了一些东西,但我发现有用的是dumpelf
实用程序(来自pax-utils
包,可通过安装apt
),我使用它转储了我的 elf 文件并发现了一些可能是这些零流的原因:
在可执行文件的所有三个标头中都有p_align
字段集:
这应该意味着每个部分都应该用零字节填充,以便其长度是 4096 的倍数。并且因为以下每个部分的大小都相对较小,所以要添加很多零字节,那就是这些零是从哪里来的。
问题)
所以,我想知道:
我对吗?是否添加了这些零字节以使这些部分足够长?
我还注意到前三个部分(
''
、'.rodata'
、'.text'
)分别从0
、4096
和开始8192
,但后面的部分('.symtab'
、'.strtab'
、'.shstrtab'
)似乎不再对齐:它们从8208
、8368
和8422
...... 为什么?这里发生了什么?我们需要这种对齐有什么用?在编程头文件中,有
p_vaddr
和p_paddr
字段设置为前三个部分开始的地址,那么如果我们已经从头文件中知道了部分的确切地址,那么对齐部分的原因是什么?它与内存页面(我的机器上的大小为 4KiB)有关吗?我什么时候想要/需要,以及如何更改对齐值?看起来应该有一个链接器参数来更改这个值。我
--nmagic
在手册中找到了这个参数ld
,它完全禁用了对齐(而且,万岁!,可执行文件没有与目标文件相同的大小),但我猜对齐是故意存在的,所以也许我只需要降低价值,使其更适合我的情况?
如果您知道我错过的任何事情,我将非常感谢您回答这些问题或任何其他细节。另外,请告诉我我是否在任何地方错了。先感谢您!
附加信息
我的目标文件的转储(带有xxd hello_world.o | grep -E '0000|$' --color=always | less -R
):
我的可执行文件转储的一部分(使用类似于上面的命令):新部分从地址 0x1000 开始
输出dumpelf hello_world.o
:
输出dumpelf hello_world
:
binary - 为什么可执行文件称为“图像文件”?
我正在阅读PE 格式的文档。在文档中,“image”这个词出现了很多次,而且似乎总是伴随着“executable”这个词出现。但是,它没有解释为什么“可执行文件”被称为“图像文件”。
维基百科上有一个页面条目列表,其中几个术语包含“映像”,例如“磁盘映像”、“ISO 映像”,甚至是“可执行文件”的链接,但仍然没有解释“映像”在这样的上下文。
谷歌搜索后,我发现这个网站对“图像”给出了合理的解释:
(1) 在计算机科学中,图像是存储在第二个存储设备上的存储设备(例如硬盘驱动器或 CD-ROM)内容的精确复制品。另请参阅磁盘映像。
那么,假设“ISO 映像”是光盘内容的精确副本,那么“可执行映像”是什么的精确副本?为什么可执行文件称为“图像文件”?
image - 转换旧的 Miniviewer 图像
我有旧扫描的 msdos 可执行映像文件,扩展名为 .exe 格式(不是通常的图像扩展,如 .tiff、.gpeg...)。我可以在 windows xp 中使用“image Miniviewer”打开它。我想隐藏它,以便可以在 Windows 7 中打开它,我尝试在 xp 中打印为 pdf,但结果是 pdf 图像失真。请提供任何帮助。我只找到通常图像扩展的解决方案。如果我知道这种应用程序编码,即使是旧 Miniviewer 上的文档也很少见,我可以在最坏的情况下反转并提取图像数据。