Linux和windows下程序产生的机器码是相同的吗?解决办法
Linux和windows下程序产生的机器码是相同的吗??
一直有个疑惑:windows下的pe文件和linux下的elf格式,他们的代码区里面的机器码都是一样的吗(除了一些地址什么的)?
都是IA32下的机器码吗?我记得好像两个操作系统下的空指令NOP就是OX90的,所以我认为同一个C程序,用VC产生的EXE文件,与用GCC产生的a.out,代码区里的机器码都是一样的,我这样理解对吗??
还是是不是基本都是IA32下的机器码??
------解决方案--------------------
pe,elf那是可执行文件格式.
而不是机器指令格式
------解决方案--------------------
看你把啥子作为相同的标准了.
它们使用的指令集是相同的. 系统调用方式是不同的, 不同的编译器生成的代码也是不同的.
------解决方案--------------------
------解决方案--------------------
不一样、、、你看一下他们调用函数时堆栈的处理就知道是有细微差别的。。
当然,在同样的硬件上,同样的汇编语句对应的机器码是相同的。。。比如mov $2,%eax与mov eax,2生成的机器码是相同的。、。
好像也跟编译器有关
一直有个疑惑:windows下的pe文件和linux下的elf格式,他们的代码区里面的机器码都是一样的吗(除了一些地址什么的)?
都是IA32下的机器码吗?我记得好像两个操作系统下的空指令NOP就是OX90的,所以我认为同一个C程序,用VC产生的EXE文件,与用GCC产生的a.out,代码区里的机器码都是一样的,我这样理解对吗??
还是是不是基本都是IA32下的机器码??
------解决方案--------------------
pe,elf那是可执行文件格式.
而不是机器指令格式
------解决方案--------------------
看你把啥子作为相同的标准了.
它们使用的指令集是相同的. 系统调用方式是不同的, 不同的编译器生成的代码也是不同的.
------解决方案--------------------
------解决方案--------------------
不一样、、、你看一下他们调用函数时堆栈的处理就知道是有细微差别的。。
当然,在同样的硬件上,同样的汇编语句对应的机器码是相同的。。。比如mov $2,%eax与mov eax,2生成的机器码是相同的。、。
好像也跟编译器有关