从 VS 的 dumpbin 目录谈 x86、xi386、x86-64、amd64...

翻开 VS 的 dumpbin.execl.exe 的存放目录,你会惊奇的发现,居然存在这么多个分支!

undefined


  什么 amd64amd64_armamd64_x86armx86_amd64x86_arm???

故事的起源

Refer: cl.exe and directories under bin, host, targets?
 In general, the format of the directory name is “host_target” so “amd64_arm” means that the compiler itself runs on x64 and it targets arm. “amd64” doesn’t follow the format but it should be obvious, it runs on and targets x64 bit. The compiler in the bin directory is a x86 only compiler.

 原来,上面说来说去也就是这三个平台而已啦,amd64arm 还有 x86。 amd64* 目录指代运行在 amd64 (也就是64位机器) 上的构建系统,可用于生成 amd64arm 还有 x86 平台目标代码;x86* 目录类似,至于 arm 目录,该平台的构建系统用于生成 amd64 还有 x86 平台目标代码,而整个 …/VC/bin 目录下,则是 x86_x86 的构建系统。

了解一些基本概念

Refer: x86/x86_64的一些基本概念
 现在的 x86 CPU 在位数上有32/64 bit之分,在 ARCH(体系架构) 上又有 x86/x86_64/x64/i386/IA32/IA64/amd64,最近又新出来一个 x32,还好不是 ARCH,只是 ABI(应用程序二进制接口),没有那么混乱。
 
 先说一下x86的这些arch,不要求很严格的话,基本上可以用下面的公式来表达:
  x86 = i386 = IA32
  amd64 = x86_64 = x64 != IA64
 其实这两个等式里很多都是别名,严格说的话,x86 的世界里只存在 x86/x86_64/IA64 三种架构。
 当年 AMD 先于 Intel 推出向下兼容的 amd64 CPU,而 Intel 推出的不兼容32位系统的 IA64 惨淡收场(被MS放了鸽子),后来 Intel 在指令上支持了 amd64,不过不愿意叫 amd64,改了个名字 x86_64
 
 再说 64bit/32bit 的兼容性问题:
  现在的 64bit CPU实际上都做了兼容 32bit 的特殊设计,所以 64bit 的CPU上运行 32bit 的软件(包括kernel/app,driver除外)是没有问题。反过来,32bit 的 CPU 上运行 64bit 的软件是不可以的。
 
 最后说重点,64bit相比32bit的性能优势:
  这里不考虑 64bit 硬件上运行 32bit 软件的这种过度方式。
  从架构上来说,64bit 拥有 64bit 的 register 和 64bit 的 bus,在数据传输效率上比 32bit 要高不少;另外,64bit 地址总线的寻址空间突破了 4G 的限制。
  所以,对于大内存,密集数据运算的应用场景,64bit 的优势是非常明显的。网上有一些 benchmark,这里不贴了。
  但是,对于小内存系统,64bit 的 CPU 在某些状况下可能比 32bit CPU的效率更低。
  因为 64bit 的 CPU 的地址是 64 位的,指针是 64 位的,编译生成的二进制文件更大,运行时占用的内存更多;另一方面,因为 64 位地址的问题,cache 中能存放的指令就更少,所以更容易导致 cache 的 miss。
  所以在某些应用场景,64bit CPU 的更大的寻址空间,更快的数据传递,更快的浮点运算的特性,与其 64bit 的地址/指针所导致的cache miss的特性,始终并存。
 
 为了充分利用64的优势,又避免 64bit 地址导致的 cache miss 的问题,Intel 提出了 x32 ABI 的概念。
  x32 不是一个 ARCH,是一个 ABI。
  x32 可以充分的使用 64bit 硬件的 64bit 寄存器,64bit 总线,以及 64bit 新增的指令,从而获得更快的数据处理速度。
  同时 x32 又使用 32bit 的地址/pointer,32bit 的 C 数据类型,因此 cache miss 并不会增加。
  x32 是一个 ABI,其设计到的部分包括:kernel 的 support,toolchain 的 support,system lib 的 support。现在 kernel(from 3.4) 和 toolchain 的 support 都已经OK。

问题深入

Refer: x86, i386, x86-64, x64, and amd64? Oh My!
 x86 instruction sets are found on 32-bit processors, x86-64 instruction sets are found on 64-bit processors. Therefore, to find your instruction set, you must figure out if you have a 32-bit or a 64-bit processor.
 
 It is common to find x86 called i386, or occasionally IA-32. x86-64 is commonly called x64 or amd64, and less often IA-32e, EM64T, or Intel64.
 Typically, knowing x86, i386, x86-64, x64, and amd64 is enough for downloading Linux.
 
 x86-64 = 64-bit = x64 = amd64
 x86 = 32-bit = i386
 If your processor supports it, use x86-64.

回到问题开始

Refer: When compiling x64 code, what’s the difference between “x86_amd64” and “amd64”?
 x64 on x86 (x64 cross-compiler)
  Allows you to create output files for x64. This version of cl.exe runs as a 32-bit process, native on an x86 machine and under WOW64 on a 64-bit Widows operating system.
 x64 on x64
  Allows you to create output files for x64. This version of cl.exe runs as a native process on an x64 machine.
 
  It has nothing to do with efficiency. The native and cross-compiler will both generate the same machine code. You will however gain some benefits by running a native 64-bit compiler process on a 64-bit workstation (larger registers, larger memory space, etc…)
 The native compiler will only run on an 64-bit copy of Windows, so if your workstation is 32-bit this compiler won’t even run.
 The cross-compiler is meant to run on x86 machines even though it will run on a 64-bit copy of Windows via WoW; however, there is no reason to do this.
 
 If you use x86_amd64, then you are typically developing on an x86 machine and you want to create x64 files that run natively on x64. You could also use this option on an x64 machine but your compiler will be running under WOW64 emulation.
 If you use AMD64, then you are developing on an x64 machine and you want to create x64 files that run natively on x64. The compiler is running natively in x64. This option is more efficient to build x64 programs.

  所以,假如你是 64 位系统(现在基本上是啦),那么在配置 dumpbin 或者 cl 环境变量时,最好选择 host 为 amd64 的路径,即 amd64*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: fxkit-dumpbin.zip是一个压缩文件,其中包含了fxkit-dumpbin工具的相关文件。fxkit-dumpbin工具是一款用于分析和查看Windows可执行文件的实用工具。该工具可以提供关于可执行文件的各种信息,如文件头、段表、符号表和导入/导出表等。 fxkit-dumpbin.zip文件可以通过解压缩软件进行解压,得到fxkit-dumpbin工具及其相关文件。解压后,用户可以通过命令行界面运行fxkit-dumpbin工具,并提供需要分析的可执行文件作为参数。工具将输出有关该文件的详细信息,包括文件的导入和导出函数、符号信息以及其他重要的头部和段信息。 fxkit-dumpbin工具对开发人员和系统管理员非常有用,可以帮助他们理解和调试Windows可执行文件。通过分析可执行文件的结构和内容,有助于解决潜在的问题和改进应用程序的性能。此外,该工具还可以用于研究恶意软件或逆向工程的目的。 总之,fxkit-dumpbin.zip文件中包含了fxkit-dumpbin工具及其相关文件,它是一款用于分析和查看Windows可执行文件的实用工具,对于开发人员和系统管理员来说非常有用。 ### 回答2: fxkit-dumpbin.zip是一个压缩文件,其中包含了一个叫做fxkit-dumpbin的程序。fxkit-dumpbin是一个用于分析二进制文件的工具,主要用途是查看二进制文件的内容,包括其指令、段、符号等信息。 当我们需要对一个二进制文件进行分析时,可以使用fxkit-dumpbin来查看该文件的结构和特征,从而更好地了解其功能和实现方式。fxkit-dumpbin可以帮助我们了解二进制文件的编译信息、代码段、数据段、符号表等重要信息。这对于程序员、安全研究人员以及逆向工程师来说非常有用。 使用fxkit-dumpbin,我们可以查看二进制文件的指令,包括其汇编代码、函数调用和返回等信息。这对于理解程序的执行流程和代码逻辑非常重要。同时,我们还可以查看二进制文件的数据段,包括静态数据和常量等信息,这对于分析程序的数据结构和变量也非常有帮助。 除了指令和数据段外,fxkit-dumpbin还可以显示二进制文件的符号表。符号表包含了二进制文件中定义的函数、变量和其他符号的信息。通过分析符号表,我们可以了解程序中的函数调用关系、全局变量和局部变量等重要信息。 总之,fxkit-dumpbin是一个用于分析二进制文件的工具,可以帮助我们更好地理解程序的结构和特征。使用fxkit-dumpbin,我们可以查看二进制文件的指令、数据段和符号表等重要信息,从而更好地分析和研究二进制文件。 ### 回答3: fxkit-dumpbin.zip是一个压缩文件,其中包含了一个名为"dumpbin"的程序。dumpbin是一个用于分析可执行程序和动态链接库的微软工具,用于显示关于这些文件的详细信息。 解压fxkit-dumpbin.zip后,可以得到一个或多个与dumpbin相关的文件。通常,这些文件包括一个可执行文件(dumpbin.exe)和一些相关的辅助文件。 通过运行dumpbin.exe,可以使用命令行界面输入要分析的可执行程序或动态链接库的路径。dumpbin会解析这些文件,并显示相关的信息,例如函数和符号的列表、导入和导出的函数、资源信息、代码段和数据段的大小等。 fxkit-dumpbin.zip可能是为了方便用户在本地使用dumpbin而打包的一个压缩文件。用户可以将其下载到本地并解压,然后使用dumpbin来提取关于一个或多个可执行程序或动态链接库的重要信息。 总而言之,fxkit-dumpbin.zip是一个包含dumpbin工具及其相关文件的压缩文件,通过解压并运行其中的内容,可以使用dumpbin来分析可执行程序和动态链接库,以获得关于它们的详细信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕山暮雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值