我的问题如下:
在较新的平台上,如.NET、Java或Flash,指令集是基于堆栈的操作码,JIT在运行时将其转换为本机格式。由于习惯了这种格式,我想知道“旧”本地EXE格式是如何执行和格式化的。例如,“寄存器”通常在较新的平台操作码中不可用,因为JIT将堆栈命令转换为它认为必要的16/32可用CPU寄存器。但在本机格式中,您需要按索引引用寄存器,并计算哪些寄存器可以重用,以及可重用的频率。
发布于 2013-01-31 17:15:55
PE文件格式(以及非windows机器上的ELF/COFF文件格式)定义了一个出现在文件开头的标题,在这个标题中有一个“Machine”代码。在PE文件中,“Machine”代码为2字节,规范为各种机器定义了一组常量:
0x1d3 Matsushita AM33
0x8664 AMD x64
0x1c0 ARM little endian
0x1c4 ARMv7 (or higher) Thumb mode only
0xebc EFI byte code
0x14c Intel 386 or later processors and compatible processors
0x200 Intel Itanium processor family
0x9041 Mitsubishi M32R little endian
0x266 MIPS16
0x366 MIPS with FPU
0x466 MIPS16 with FPU
0x1f0 Power PC little endian
0x1f1 Power PC with floating point support
0x166 MIPS little endian
0x1a2 Hitachi SH3
0x1a3 Hitachi SH3 DSP
0x1a6 Hitachi SH4
0x1a8 Hitachi SH5
0x1c2 ARM or Thumb (“interworking”)
0x169 MIPS little endian WCE v2 然后,在PE (或ELF)文件中有一个或多个包含(二进制)机器代码的“代码”部分。该代码被加载到内存中,并由CPU直接执行。操作系统或动态链接器/加载程序(它负责实际加载)知道它正在运行的是哪台机器,因此它会检查头中的“machine”代码,以确保它在尝试加载和执行代码之前匹配。如果不匹配,可执行文件将被拒绝,因为它无法运行。
https://stackoverflow.com/questions/14630852
复制相似问题