mov edi,edi和Hot Patching详解

微软揭秘 Windows Server Hotpatching 工作原理,带你了解编程中的奥秘 它允许在不重启服务器的情况下应用关键系统更新和补丁,从而最大程度地减少系统的停机时间。通过理解和应用 Windows Server Hotpatching 技术,开发人员可以在不中断系统运行的情况下应用关键的系统更新和补丁,提高服务器的可用性和稳定性。这项技术在生产环境中尤为重要,因为它可以减少系统的停机时间,提高服务的连续性。它使用一种称为“代码补丁”或“代码挂钩”的技术,将新的代码片段插入到系统中。最后,我们将新函数的地址写入原始函数的位置,从而完成函数的更新。将新函数的代码复制到分配的内存空间中。 阅读详情

mov edi,edi和Hot Patching的一点解释

最近发现不少函数开头都有mov edi,edi这样的指令,正好在《Advanced Windows Debugging》一书中看到了一点解释。书上说是为了Hot Patching,网上也有这样的解释。

不过网上的解释有两种情况,一种是函数开头有mov edi, edi,再往前则是5个连续的nop的,就是用来Hot Patching的。而如果仅仅只是mov edi, edi,则是为了对齐设置的指令,和两个nop差不多,不过据说前者速度更快。MessageBoxA的情况如下:

7632EA68    5D              pop     ebp
7632EA69    C2 1400         retn    14
7632EA6C    90              nop
7632EA6D    90              nop
7632EA6E    90              nop
7632EA6F    90              nop
7632EA70    90              nop
;↓↓↓↓↓↓↓↓↓↓MessageBoxA↓↓↓↓↓↓↓↓↓↓
7632EA71 >  8BFF            mov     edi, edi
7632EA73    55              push    ebp
7632EA74    8BEC            mov     ebp, esp
7632EA76    833D 749A3376 0>cmp     dword ptr ds:[76339A74], 0
7632EA7D    74 24           je      short USER32.7632EAA3
7632EA7F    64:A1 18000000  mov     eax, dword ptr fs:[18]
7632EA85    6A 00           push    0

可以看到是第一种情况。这可以方便Inline Hook的实现。把mov edi, edi改写成一个近跳(EB),跳到第一个nop之处,然后把五个nop改写成一个远跳(E9)。而如果要使用,则只需跳转到到mov edi, edi的下一条指令。
Hot-Patching


本博客很少转载他人文章,如未特别标明,均为原创,转载请注明出处:
本文出自程序人生 >> mov edi,edi和Hot Patching的一点解释

HotPatching:(非常)深入内部 有五种方法可供使用的热修补库! 立即下载

相关推荐

酒店前台pms管理系统

对于酒店经营者来说,选择一款优秀的管理系统,是提升运营效率、优化客人体验的关键。PMS酒店管理系统凭借其强大的房态管理、实时数据监控、OTA直联、无人值守等功能,已经成为许多酒店提升管理水平的得力助手。无论是大中型酒店,还是小型民宿,PMS系统都能根据不同需求提供量身定制的解决方案,帮助酒店实现精细化管理、提高运营效率。如果你也在为酒店管理中的繁琐琐事而困扰,不妨尝试一下PMS酒店管理系统,感受科技带来的便利与高效,让你的酒店运营更上一层楼!

2409_89897808的博客 2485

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

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

crkres9527 3019

别再手动写ZPL了!用C#和斑马官方SDK搞定ZT410 RFID打印机(附中文乱码解决方案)

本文详细介绍了如何使用C#和斑马官方SDK驱动ZT410 RFID打印机,解决中文乱码和RFID数据写入等常见问题。通过实战指南,开发者可以快速掌握从基础连接到高级调试的全流程,提升打印效率和可靠性。特别适用于物流、零售和资产管理领域的应用。

weixin_29267307的博客 226

MOV EDI,EDI指令的解释(整理)

XP系统程序中开头的MOV  EDI,EDI指令的解释: 在VS .NET 2003的VC7\INCLUDE目录中的listing.inc文件中定义了1到7个字节的无破坏性NOP操作的宏 MOV  EDI,EDI 就是两个字节的NOP 在程序中与NOP指令的意义相同。 为什么要用MOV  EDI,EDI 而不用两个NOP? 我的理解是: 用两个NOP指令耗费的CPU时钟周期

绝迹·危言的专栏 8075

关于VS2019调试问题:进程已退出,代码为-1073741819(已解决)

关于VS2019调试问题:进程已退出,代码为-1073741819(已解决) 详情:上一篇发了这个进程问题,在我翻阅了《c语言程序设计第四版》和《算法与数据结构》两本书对照代码加上调试终于找到了解决方法 解决方法: 首先找到项目的源文件右击找到属性 然后选择从生成中排除选择是! 重新生成解决方案,发现代码问题: 之前的代码: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include &lt

qq_51553982的博客 1万+

ETL数据集成案例

一个典型的ETL数据集成案例是将多个来源的数据合并成一个数据集。假设有一个公司,该公司使用一些不同的系统来存储不同部门的数据,例如销售数据存储在一个CRM系统中,财务数据存储在一个ERP系统中,人力资源数据存储在一个HR系统中。为了更好地进行报告和分析,该公司决定将所有这些数据集成到一个数据仓库中。以下是实现这一目标的ETL过程的步骤:提取(Extract):首先,需要从每个系统中提取所需的数据。每个系统可能有不同的数据格式和结构,因此需要编写不同的提取程序或查询来提取数据。

runqu的博客 948

函数调用之mov edi, edi

很多函数前面几个指令都是下面这样: mov     edi, edi push    ebp mov     ebp, esp 第一行指令,是不是没用呢? 你还会在上面发现5个没用的nop 这样的做法是方便做hook,比如你要挂钩这个函数,你可以用一个2字节的短jmp(eb xx)转移到那5个nop那里,然后在那5个nop那里做一个大的jmp(e9 xx xx xx x

HUA的专栏 1771

大模型系列——一文看懂“提示词” vs “提示词工程” vs “上下文工程”

本文区分了AI领域的三个关键概念:提示词(Prompt)、提示词工程(Prompt Engineering)和上下文工程(Context Engineering)。提示词是直接输入给AI模型的指令文本;提示词工程则是系统化设计、测试和优化提示词的过程;而上下文工程是为AI构建动态上下文,提供恰当信息和工具的科学与艺术。文章通过翻译案例展示了提示词工程的迭代过程,并说明上下文工程在AI Agent中的核心作用——动态收集和组织必要信息。最后强调普通人只需掌握提示词编写,开发AI应用才需深入提示词工程,构建智能

2401_84052244的博客 750

为什么会有mov edi, edi?(转)

原来一直被windows上的一些固定汇编指令搞的有点糊涂, 各种说法其实都有, 比如这个mov edi, edi. 实际这个指令是干什么用的呢? 每个人都有不同的说法, 今天了解到一种比较靠谱的说法!在VS的安装目录中的listing.inc文件中定义了1到7个字节的无破坏性NOP操作的宏MOV EDI,EDI 就是两个字节的NOP在程序中与NOP指令的意义相同。为什么要用MOV EDI,EDI

u012129783的博客 661

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法

基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法

a_zxswer的博客 191

函数开始处的MOV EDI, EDI的作用收藏

函数开始处的MOV EDI, EDI的作用收藏 BYTE JMP[10] = {0x8b,0xFF, 0x55, 0x8b, 0xEC, 0xE9, 0x00, 0x40/0x00, 0x00, 0x00}; Posted on 2009-04-01 11:19 S.l.e!ep.¢% 阅读(631) 评论(0)  编辑 收藏 引用 所属分类: Reverse Engineerin

linuxheik的专栏 1196

uniapp [安卓苹果App端] - 实现获取请求手机位置权限+开启定位获取经纬度/省市区地址等,检测权限手机定位是否开启并引导用户同意授权,uniApp app端调用本机开启本机定位权限及IP属地

uni-app,手机定位权限,安卓Android,苹果ios,uniapp获取本机位置权限,uni-app获取用户定位数据,uniapp APP获取用户IP属地定位,判断权限,权限被拒绝了怎么办,苹果ios系统无法开启定位,获取定位权限报错,uniapp定位获取省市区,UNI-APP如何开启手机定位功能并获取经纬度,不依赖地图第三方插件组件,打包上架后如何获取,真机运行无法获取定位,安卓和ios权限获取,判断权限检查,正式打包,详细教程,根据获取当前经纬度,再根据经纬度去定位具体省市区,自定义基座打包能成功

🏆 前端领域优质创作者 1万+

Inline HOOK API 改进版(hot-patching)

记得在之前写过一篇hook api的文章(C/C++ HOOK API(原理深入剖析之-LoadLibraryA)),那篇文章主要原理是构造一块代码字节,将LoadLibraryA函数的前面16个字节给修改,然后跳转到自定义的函数中。要调用正常的函数时,又将其unHook,这样一来再一次调用中,有一次unhook和一次hook,操作显得过于频繁。而且hook与unhook当时设计成了thiscall,因此维护传递this的寄存器(通常是ecx)就成了必然,再加上参数的传递,__Inline_Hook_Fun

技术思行 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Why does the compiler generate a MOV EDI, EDI instruction at the beginning of functions?

Why does the compiler generate a MOV  EDI, EDI instruction at the beginning of functions?   I’ve recently noticed that on the XPSP2 Beta that I am running the function prologs look like this:

crkres9527 561

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Move EDI, EDI的作用

玩WinDBG的时候, 发现函数的反汇编代码的最开始部分总是包含一条move edi, edi的指令. 比如下面的代码static unsigned int __stdcall Fibonacci_stdcall(unsigned int n) { switch(n) { case 0: STOP_ON_DEBUGGER;return 0; ...

weixin_34010566的博客 249

Hook :HOOK API 原理深入剖析2 - Inline(hot-patching)

记得在之前写过一篇hook api的文章(C/C++ HOOK API(原理深入剖析之-LoadLibraryA)),那篇文章主要原理是构造一块代码字节,将LoadLibraryA函数的前面16个字节给修改,然后跳转到自定义的函数中。要调用正常的函数时,又将其unHook,这样一来再一次调用中,有一次unhook和一次hook,操作显得过于频繁。而且hook与unhook当时设计成了thiscal

it技术学习 1051

Hot Patching

Well, how frustrating is this... as far as I can tell, .Text completely ate my last post, except for a couple of sentences at the top. Ive switched to writing these posts off-line (like a real blogge

求索 1005

【转自论坛】系统API中如何实现hotpatching。。。

原帖链接:http://bbs.youkuaiyun.com/topics/390940473?page=1#post-400726264 问题的来源于调试若干个系统的API函数,发现所有的系统API函数的开始出的汇编代码都会有如下的这个样子 76754A86   nop                             // 都会出现 76754A87   nop

YSBJ123的博客 932

热补丁:为什么Windows API都以无意义的 mov edi,edi 开头?

为什么Windows函数都以无意义的MOVEDI、EDI指令开始? 我们参考Windows 的反汇编,返现函数的开始都是以mov edi,edi,它看似毫无意义(该指令将寄存器复制到自己,并没有更新标志;这是完全没有意义的。) 原因是:这是故意设计的热补丁(hot-patching)。 热补丁 这个MOV EDI, EDI指令是两个字节。NOP,这仅够在跳转指令中进行修补,以便可以动态更新函数,即运行时修改一个函数的行为。 修改过程如下: 把MOV EDI, EDI修改为一条短跳转指令(一条短跳转指令恰好

CodeBowl的博客 605
上一篇: Inline HOOK API 改进版(hot-patching)
下一篇: GDB查看内存命令(x命令)
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值