标签: executable-format

什么是符号表以及它如何集成到可执行文件中?

当我尝试调试可执行文件时:

(gdb) break +1
No symbol table is loaded.  Use the "file" command.
Run Code Online (Sandbox Code Playgroud)

这究竟是什么意思?

符号表是否附加到可执行文件?

gdb symbol-tables executable-format

16
推荐指数
2
解决办法
3万
查看次数

Exec格式错误32位可执行Windows子系统Linux?

当我尝试执行gcc -m32 main.c -o mainWindows子系统Linux上编译的32位文件时,我收到以下错误:bash: ./main: cannot execute binary file: Exec format error.

如果我编译它没有 -m32它运行.

在WSL上运行32位可执行文件的任何解决方案?

谢谢.

executable gcc 32-bit executable-format windows-subsystem-for-linux

13
推荐指数
3
解决办法
9118
查看次数

为什么编译的Java类文件小于C编译文件?

我想知道为什么我们从编译.c文件得到的.o文件打印出"Hello,World!" 大于Java .class文件,也打印"Hello,World!"?

c java bytecode executable-format

12
推荐指数
2
解决办法
3153
查看次数

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

我正在阅读PE格式的文档。在文档中,“图像”一词多次出现,并且似乎总是与“可执行文件”一词一起出现。然而,它并没有解释为什么“可执行文件”被称为“图像文件”。

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

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

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

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

binary executable executable-format

9
推荐指数
1
解决办法
1957
查看次数

核心转储本身是可执行的吗?

Core转储上的维基百科页面说

在类Unix系统中,核心转储通常使用标准的可执行映像格式:

a.out in older versions of Unix,
ELF in modern Linux, System V, Solaris, and BSD systems,
Mach-O in OS X, etc.
Run Code Online (Sandbox Code Playgroud)

这是否意味着核心转储本身是可执行的?如果没有,为什么不呢?

编辑:由于@ WumpusQ.Wumbley coredump_filter在评论中提到了一个问题,或许上面的问题应该是:是否可以生成核心转储,使其可以自行执行?

unix linux executable coredump executable-format

6
推荐指数
1
解决办法
1481
查看次数

是否有允许我移动堆栈起始地址的链接器脚本指令?

我正在尝试使用 x86_64 上的链接器脚本更改堆栈的起始位置。我能够使用这个移动我的可执行起始地址:

PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x200000)); . = SEGMENT_START("text-segment", 0x200000) + SIZEOF_HEADERS;
Run Code Online (Sandbox Code Playgroud)

我像这样改变了我的全局变量:

 .data ALIGN(0x10000000)           :
{
*(.data .data.* .gnu.linkonce.d.*)
 SORT(CONSTRUCTORS)
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下内容来移动堆栈区域:

. = 0x50000000;
.stack    :
{
 stack_start = .;

  PROVIDE( stack_start = . );
  *(.stack)
      . += 0x2000;
  stack_end = . ;
  PROVIDE( stack_end = . );
}
Run Code Online (Sandbox Code Playgroud)

但这并没有让我去任何地方。

这是我用来测试堆栈位置的测试程序:

 #include <stdio.h>
 #include <stdlib.h>

int global_var = 555;

void test()
{
   int local_test = 666;

   printf("address of global_var: %p\n", &global_var);
   printf("address of local_test: %p\n", &local_test); …
Run Code Online (Sandbox Code Playgroud)

linker executable elf linker-scripts executable-format

5
推荐指数
1
解决办法
1435
查看次数

PEI 格式是什么?

我知道PE是COFF的修改版,PE+是PE的64位支持的修改版,但是PEI是什么?我说 PE 和 PEI 之间没有区别并且它们可以互换使用是否正确?

file-format portable-executable executable-format

5
推荐指数
2
解决办法
2057
查看次数

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

介绍

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

SECTION .rodata
    msg:        db 'Hello world!', 0xA
    msg_len:    equ $ - msg

SECTION .text
    global _start

_start:
    mov eax, 4  ; `write` system call
    mov ebx, 1  ; to stdout
    mov ecx, msg
    mov edx, msg_len
    int 0x80

    mov eax, 1  ; `exit` system call
    xor ebx, ebx    ; exit code 0
    int 0x80
Run Code Online (Sandbox Code Playgroud)

我使用以下命令编译它:

SECTION .rodata
    msg:        db 'Hello world!', 0xA
    msg_len:    equ $ - msg

SECTION .text
    global _start

_start:
    mov eax, 4  ; …
Run Code Online (Sandbox Code Playgroud)

linux executable elf executable-format

5
推荐指数
1
解决办法
60
查看次数

为什么 EXE 文件中有文本函数名称?

我编译了一个 C++ 程序,使其在发布模式下有一个 EXE 文件。当我在编辑器中打开 EXE 文件时,我看到一些文本块,其中大部分是程序中使用的低级函数的名称。

人们总是说计算机只能理解二进制机器代码。那么,可执行程序文件中这些人类可读的文本存在的目的是什么呢?为什么计算机需要函数名来运行程序?

在此输入图像描述

IDE:Visual Studio 2015 RC
平台:Windows 8.1 x64

编译器命令行选项:

/GS /GL /W3 /Gy /Zc:wchar_t /Zi /Gm- /Ox /Ob2 /sdl
/Fd"x64\Release\vc140.pdb" /Zc:inline /fp:precise /D "_MBCS"
/errorReport:prompt /GT /WX- /Zc:forScope /Gd /Oy /Oi /MD
/Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Ot
/Fp"x64\Release\<ProjectName>.pch"
Run Code Online (Sandbox Code Playgroud)

链接器命令行选项:

/OUT:"<SolutionPath>\x64\Release\<ProjectName>.exe"
/MANIFEST /LTCG /NXCOMPAT
/PDB:"<SolutionPath>\x64\Release\<ProjectName>.pdb"
/DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib"
"comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib"
"uuid.lib" "odbc32.lib" "odbccp32.lib"
/MACHINE:X64 /OPT:REF /PGD:"<SolutionPath>\x64\Release\<ProjectName>.pgd"
/MANIFESTUAC:"level='asInvoker' uiAccess='false'"
/ManifestFile:"x64\Release\<ProjectName>.exe.intermediate.manifest"
/OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
Run Code Online (Sandbox Code Playgroud)

编辑:

我对rcgldr 的答案进行了更改。我进行了项目设置更改,将命令行开关更改\MD为 …

c++ executable exe executable-format

5
推荐指数
1
解决办法
2728
查看次数

可用的 ELF 可执行文件需要哪些部分?

我正在创建一个 ELF 可执行文件,我需要知道操作系统需要哪些部分才能加载和执行它。

细节:

操作系统:Ubuntu 10.04(64 位)
内核版本:2.6.32-24
架构:i386

我意识到以下可能是必要的:

  • 。文本
  • .symtab
  • .rel.text

还有其他人吗?

elf executable-format sections

3
推荐指数
1
解决办法
1151
查看次数

2
推荐指数
1
解决办法
1944
查看次数

.com 可执行文件可以在 Windows 之外的其他操作系统上运行吗?

据我所知,可执行文件的扩展名 .com .exe 等适用于操作系统。它与底层 ISA(无论是 x86 还是 SPARC)无关。我对么?.com 可执行文件只能在 Windows 操作系统上运行吗?.com 可执行文件是遗留文件吗?

x86 executable dos executable-format x86-16

2
推荐指数
1
解决办法
460
查看次数