百姓大小事,一呼百应!

百姓网 | 百姓知道

游戏电竞

在同一硬件上,同一条汇编指令在不同操作系统中汇编后的二进制代码是否一样?

还是同一台电脑,当跑着不同操作系统的时候,不关注最后生成的可执行文件的二进制格式,而是只看其中一条汇编指令汇编后的二进制代码(X86),那它在windows、linux下的二进制码是否一样?

2 个回答

  • 时国怀 | 2017-10-15 10:19:38

    同一种汇编语言,翻译成的二进制代码是完全相同的,汇编语言的定义就是用助记符代替机器指令,注意是代替,纯粹的替换操作,所以,如果是同一种语言,在同一个硬件平台上,那么同样的汇编指令对应的二进制编码是完全相同的。

    NOP是0x90,那么不管是Linux还是Windows里,NOP都是0x90

    本问答由时国怀提供

  • 时国怀 | 2017-10-15 10:02:28

    不同编译器,不同选项,对“同一指令”处理结果可能会不同吧(这个我不是很确定,给出一个异议的思路,做参考,欢迎批评指正)。
    1. 跳转:比如 写 jmp lab 可能会根据优化情况优化成相对跳转或是决对跳转?(汇编器也是编译器,可以遵循编译器中描述的内容(如果不是拆卸的话)
    2. 如果汇编器有优化功能,优化级别高的话,那么写 mov a -> b mov b -> c 会不会给你优化成 mov a -> c?(此条暂时未找到支持证据。)

    -----------------
    补充:
    3. 刚搜了一下,NASM 汇编器,调整优化参数 还会对立即数的处理有影响。1中提到的jmp 会有优化处理。
    (这里我指的机器码是机器码的“形式”,A。有时不同汇编里对 jmp 长跳转,短跳转,相对决定跳转的指令在写汇编程序时不强制区分,或有多种形式表现。B。同一长跳转jmp lab 可能是到0xffff,或长跳转 到 0xaaaa 暂认为他们相同(较真的话它们是不是也不算是相同的机器码?)。)

    本问答由时国怀提供

* 本站部分内容来源自网络,仅作分享之用,侵删。