找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2443|回复: 1

MOV EDI,EDI

[复制链接]
发表于 2015-5-12 15:24:59 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
摘自KSSD
MOV  EDI,EDI 就是两个字节的NOP
在程序中与NOP指令的意义相同。

为什么要用MOV  EDI,EDI 而不用两个NOP?
我的理解是:
用两个NOP指令耗费的CPU时钟周期要比用MOV  EDI,EDI指令要长,为了提高效率,就采用了MOV  EDI,EDI


listing.inc文件的内容

  1. ;; LISTING.INC
  2. ;;
  3. ;; This file contains assembler macros and is included by the files created
  4. ;; with the -FA compiler switch to be assembled by MASM (Microsoft Macro
  5. ;; Assembler).
  6. ;;
  7. ;; Copyright (c) 1993, Microsoft Corporation. All rights reserved.

  8. ;; non destructive nops
  9. npad macro size
  10. if size eq 1
  11.   nop
  12. else
  13. if size eq 2
  14.    mov edi, edi
  15. else
  16.   if size eq 3
  17.     ; lea ecx, [ecx+00]
  18.     DB 8DH, 49H, 00H
  19.   else
  20.    if size eq 4
  21.      ; lea esp, [esp+00]
  22.      DB 8DH, 64H, 24H, 00H
  23.    else
  24.     if size eq 5
  25.       add eax, DWORD PTR 0
  26.     else
  27.      if size eq 6
  28.        ; lea ebx, [ebx+00000000]
  29.        DB 8DH, 9BH, 00H, 00H, 00H, 00H
  30.      else
  31.       if size eq 7
  32.   ; lea esp, [esp+00000000]
  33.   DB 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H
  34.       else
  35.   %out error: unsupported npad size
  36.   .err
  37.       endif
  38.      endif
  39.     endif
  40.    endif
  41.   endif
  42. endif
  43. endif
  44. endm

  45. ;; destructive nops
  46. dpad macro size, reg
  47. if size eq 1
  48.   inc reg
  49. else
  50.   %out error: unsupported dpad size
  51.   .err
  52. endif
  53. endm
复制代码
回复

使用道具 举报

发表于 2015-5-16 18:09:15 | 显示全部楼层
除了mov edi,edi以外,还有66 90这种nop。

66 90是在16位状态下运行32位的xchg eax,eax,或者32位状态下运行16位的xchg ax,ax
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-25 08:14 , Processed in 0.039510 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表