faku 发表于 2011-02-22 10:42

求助:可执行文件的代码段存储的指令格式是怎么样的?

我曾经以为:
GCC在翻译C源文件的时候会针对当前CPU生成指令,比如在AMD平台上,会生成AMD的指令

后来, 我发现我错了, 因为我们单位两台电脑的CPU是不同的,操作系统都是linux AS4, 在两台电脑上分别编译的可执行文件可以在另外一台电脑上执行

因此,我觉得可执行文件的.text段存储的不是纯机器指令, 而是经过处理的机器指令, 工作在操作系统上的加载器会根据当前CPU类型正确加载.text段

但是, 疑问来了
1.如果我的假设成立, 那么GCC会生成很多不同平台上的指令, 这个似乎不通啊, .text段会很大?
2.ELF头部的标识CPU类型的标志, 只能是一种啊, 那么在AMD上生成的可执行文件, 如何在INTEL上执行呢?

ww2000e 发表于 2011-02-22 11:18

amd和intel两个指令不一样?好像差不多吧

faku 发表于 2011-02-22 13:21

差不多也总有差别吧, 只是不明白在AMD平台上编译得到的指令怎么就可以在INTEL平台上运行呢?

EricFisher 发表于 2011-02-22 13:30

说明这个程序所使用的指令集,这两台电脑的cpu都支持。

accessory 发表于 2011-02-23 03:00

就是纯机器指令。

AMD, INTEL 大部分代码是互相兼容的。有小部分不一样

faku 发表于 2011-02-24 10:01

可能是测试机器的CPU:AMD和INTEL不能说明问题, 我再多找几个机器试验下

cjaizss 发表于 2011-02-26 10:12

差不多也总有差别吧, 只是不明白在AMD平台上编译得到的指令怎么就可以在INTEL平台上运行呢?
faku 发表于 2011-02-22 13:21 http://linux.chinaunix.net/bbs/images/common/back.gif
所谓交叉编译啊,没什么好奇怪的吧。编译的过程是个语言翻译的过程,在哪个平台上都可实现啊
页: [1]
查看完整版本: 求助:可执行文件的代码段存储的指令格式是怎么样的?