函数开始处的MOV EDI EDI的作用

本文探讨了在函数开始时使用MOV EDI, EDI指令的目的,该指令常见于汇编语言编程中,可能涉及函数调用规范或初始化操作。通过学习,有助于深化对底层编程的理解。" 50933898,5626772,C语言与汇编混合编程实践,"['C语言编程', '汇编语言', '混合编程', 'Linux开发']
摘要由CSDN通过智能技术生成
                调试程序调试到系统库函数的代码时,总会发现系统函数都是从一条MOV EDI, EDI指令开始的,紧接着这条指令下面才是标准的建立函数局部栈的代码。对系统DLL比如ntdll.dll进行反汇编,可以发现它的每个导出函数都是如此,并且每个导出函数开始处的MOV EDI, EDI上面紧接着5条NOP指令。比如在WinDbg中查看TextOutA周围的代码:
0:000> u TextOutA-0x0a L 10
GDI32!NtGdiTransparentBlt+0xa:
77efc43f ff12            call    dword ptr [edx]
77efc441 c22c00          ret     2Ch
77efc444 90              nop
77efc445 90              nop
77efc446 90              nop
77efc447 90              nop
77efc448 90              nop
GDI32!TextOutA:
77efc449 8bff            mov     edi,edi
77efc44b 55              push    ebp
77efc44c 8bec            mov     ebp,esp
很明显,两个字节的MOV EDI,EDI指令什么事情也不做,那么,就有两个问题:第一,为什么不直接从函数体开始而要从这条什么都不做的指令开始呢?第二,即使需要在函数一开始空出两个字节,为什么不直接使用两条NOP指令,而要使用这条M
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值