8.3.3 快速系统调用 —— XP SP3上SystemCallStub的奇怪问题
2024-08-27 08:25:21
依书上的例子,ReadFile()函数会调用ntdll!NtReadFile(),后者将服务号放到eax之中,然后调用SharedUserData!SystemCallStub(),由此函数执行sysenter指令来切入内核。
但是实际操作查看反汇编却是这个样子:
指令完全是错乱的,猜测此处应该是不是指令,回看一下ntdll!NtReadFile()处的调用代码:
发现是将SharedUserData!SystemCallStub()处的地址写入edx寄存器,再通过edx间接寻址调用,所以推测该处数据应该为函数指针:
反汇编此地址:
发现是名为ntdll!KiFastSystemCall()的函数,其内部正是执行了sysenter指令来切入内核。
可能由于实际操作的系统为XP SP3,而书中使用的系统为XP SP1,故有所偏差。
最后在网上搜索,找到了《软件调试》作者张银奎老师的本人回答:
疑问解决!
最新文章
- css border属性做小三角标
- CentOS如何挂载硬盘
- linux操作系统的分类及解释
- WCF入门教程(三)属性标签
- 一段经典的node.js 数据库高并发实现
- SDN:软件定义网络
- S_OK与S_FALSE,E_FAIL
- python socket 编程之三:长连接、短连接以及心跳
- hibernate 单元测试 5.2
- 简述负载均衡&;CDN技术(转)
- STL容器存储的内容动态分配情况下的内存管理
- 如何对软件开发工具 WebBuilder 进行安装?
- LogBack log出力路径
- 201521123122 《java程序设计》 第四周学习总结
- spring cloud 入门系列五:使用Feign 实现声明式服务调用
- 解决IntelliJ IDEA 创建Maven项目速度慢问题
- TensorFlow函数教程:tf.nn.dropout
- 解决Skyline6.5多球对比时,自动运行TerraExplorer软件的问题
- 【转】Python数据类型之“集合(Sets)与映射(Mapping)”
- MySQL索引失效的几种情况