sysenter内核入口点代码分析
参考:http://www.mouseos.com/windows/kernel/KiFastCallEntry.html
KiFastCallEntry
nt!KiFastCallEntry:
8053dad0 b923000000 mov ecx,23h
8053dad5 6a30 push 30h
8053dad7 0fa1 pop fs
8053dad9 8ed9 mov ds,cx
8053dadb 8ec1 mov es,cx
8053dadd 8b0d40f0dfff mov ecx,dword ptr ds:[0FFDFF040h]
8053dae3 8b6104 mov esp,dword ptr [ecx+4]
8053dae6 6a23 push 23h
8053dae8 52 push edx
8053dae9 9c pushfd
8053daea 6a02 push 2
8053daec 83c208 add edx,8
8053daef 9d popfd
8053daf0 804c240102 or byte ptr [esp+1],2
8053daf5 6a1b push 1Bh
8053daf7 ff350403dfff push dword ptr ds:[0FFDF0304h]
8053dafd 6a00 push 0
8053daff 55 push ebp
8053db00 53 push ebx
8053db01 56 push esi
8053db02 57 push edi
8053db03 8b1d1cf0dfff mov ebx,dword ptr ds:[0FFDFF01Ch]
8053db09 6a3b push 3Bh
8053db0b 8bb324010000 mov esi,dword ptr [ebx+124h]
8053db11 ff33 push dword ptr [ebx]
8053db13 c703ffffffff mov dword ptr [ebx],0FFFFFFFFh
8053db19 8b6e18 mov ebp,dword ptr [esi+18h]
8053db1c 6a01 push 1
8053db1e 83ec48 sub esp,48h
8053db21 81ed9c020000 sub ebp,29Ch
8053db27 c6864001000001 mov byte ptr [esi+140h],1
8053db2e 3bec cmp ebp,esp
8053db30 759a jne nt!KiFastCallEntry2+0x47 (8053dacc)
8053db32 83652c00 and dword ptr [ebp+2Ch],0
8053db36 f6462cff test byte ptr [esi+2Ch],0FFh
8053db3a 89ae34010000 mov dword ptr [esi+134h],ebp
8053db40 0f854afeffff jne nt!Dr_FastCallDrSave (8053d990)
8053db46 8b5d60 mov ebx,dword ptr [ebp+60h]
8053db49 8b7d68 mov edi,dword ptr [ebp+68h]
8053db4c 89550c mov dword ptr [ebp+0Ch],edx
8053db4f c74508000ddbba mov dword ptr [ebp+8],0BADB0D00h
8053db56 895d00 mov dword ptr [ebp],ebx
8053db59 897d04 mov dword ptr [ebp+4],edi
8053db5c fb sti
8053db5d 8bf8 mov edi,eax
8053db5f c1ef08 shr edi,8
8053db62 83e730 and edi,30h
8053db65 8bcf mov ecx,edi
8053db67 03bee0000000 add edi,dword ptr [esi+0E0h]
8053db6d 8bd8 mov ebx,eax
8053db6f 25ff0f0000 and eax,0FFFh
8053db74 3b4708 cmp eax,dword ptr [edi+8]
8053db77 0f8345fdffff jae nt!KiBBTUnexpectedRange (8053d8c2)
8053db7d 83f910 cmp ecx,10h
8053db80 751a jne nt!KiFastCallEntry+0xcc (8053db9c)
8053db82 8b0d18f0dfff mov ecx,dword ptr ds:[0FFDFF018h]
8053db88 33db xor ebx,ebx
8053db8a 0b99700f0000 or ebx,dword ptr [ecx+0F70h]
8053db90 740a je nt!KiFastCallEntry+0xcc (8053db9c)
8053db92 52 push edx
8053db93 50 push eax
8053db94 ff15c4355580 call dword ptr [nt!KeGdiFlushUserBatch (805535c4)]
8053db9a 58 pop eax
8053db9b 5a pop edx
8053db9c ff0538f6dfff inc dword ptr ds:[0FFDFF638h]
8053dba2 8bf2 mov esi,edx
8053dba4 8b5f0c mov ebx,dword ptr [edi+0Ch]
8053dba7 33c9 xor ecx,ecx
8053dba9 8a0c18 mov cl,byte ptr [eax+ebx]
8053dbac 8b3f mov edi,dword ptr [edi]
8053dbae 8b1c87 mov ebx,dword ptr [edi+eax*4]
8053dbb1 2be1 sub esp,ecx
8053dbb3 c1e902 shr ecx,2
8053dbb6 8bfc mov edi,esp
8053dbb8 3b35b48f5580 cmp esi,dword ptr [nt!MmUserProbeAddress (80558fb4)]
8053dbbe 0f83a8010000 jae nt!KiSystemCallExit2+0x9f (8053dd6c)
8053dbc4 f3a5 rep movs dword ptr es:[edi],dword ptr [esi]
8053dbc6 ffd3 call ebx
8053dbc8 8be5 mov esp,ebp
8053dbca 8b0d24f1dfff mov ecx,dword ptr ds:[0FFDFF124h]
8053dbd0 8b553c mov edx,dword ptr [ebp+3Ch]
8053dbd3 899134010000 mov dword ptr [ecx+134h],edx
daniel@daniel-mint ~/bap/bap-0.7/libasmir/apps $ hexdump -C kifastcallentry.dump | cut -b 10-60 | sed -re 's/[0-9a-f]{2}/\\x&/g' | sed -re 's/ //g' | sed -e 's/^/"/g' | sed -e 's/$/"/g'
"\xb9\x23\x00\x00\x00\x6a\x30\x0f\xa1\x8e\xd9\x8e\xc1\x8b\x0d\x40"
"\xf0\xdf\xff\x8b\x61\x04\x6a\x23\x52\x9c\x6a\x02\x83\xc2\x08\x9d"
"\x80\x4c\x24\x01\x02\x6a\x1b\xff\x35\x04\x03\xdf\xff\x6a\x00\x55"
"\x53\x56\x57\x8b\x1d\x1c\xf0\xdf\xff\x6a\x3b\x8b\xb3\x24\x01\x00"
"\x00\xff\x33\xc7\x03\xff\xff\xff\xff\x8b\x6e\x18\x6a\x01\x83\xec"
"\x48\x81\xed\x9c\x02\x00\x00\xc6\x86\x40\x01\x00\x00\x01\x3b\xec"
"\x75\x9a\x83\x65\x2c\x00\xf6\x46\x2c\xff\x89\xae\x34\x01\x00\x00"
"\x0f\x85\x4a\xfe\xff\xff\x8b\x5d\x60\x8b\x7d\x68\x89\x55\x0c\xc7"
"\x45\x08\x00\x0d\xdb\xba\x89\x5d\x00\x89\x7d\x04\xfb\x8b\xf8\xc1"
"\xef\x08\x83\xe7\x30\x8b\xcf\x03\xbe\xe0\x00\x00\x00\x8b\xd8\x25"
"\xff\x0f\x00\x00\x3b\x47\x08\x0f\x83\x45\xfd\xff\xff\x83\xf9\x10"
"\x75\x1a\x8b\x0d\x18\xf0\xdf\xff\x33\xdb\x0b\x99\x70\x0f\x00\x00"
"\x74\x0a\x52\x50\xff\x15\xc4\x35\x55\x80\x58\x5a\xff\x05\x38\xf6"
"\xdf\xff\x8b\xf2\x8b\x5f\x0c\x33\xc9\x8a\x0c\x18\x8b\x3f\x8b\x1c"
"\x87\x2b\xe1\xc1\xe9\x02\x8b\xfc\x3b\x35\xb4\x8f\x55\x80\x0f\x83"
"\xa8\x01\x00\x00\xf3\xa5\xff\xd3\x8b\xe5\x8b\x0d\x24\xf1\xdf\xff"
"\x8b\x55\x3c\x89\x91\x34\x01\x00\x00"
""
call ebx会最终跳转到真正的System Service服务例程处执行, 如果我们hook了任一SSDT项目,那么它的返回地址一定是在8053dbc8处。
sysenter内核入口点代码分析的更多相关文章
- linux内核中链表代码分析---list.h头文件分析(一)【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637596.html linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17 ...
- linux内核中链表代码分析---list.h头文件分析(二)【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...
- STM32F103 ucLinux开发之二(内核启动汇编代码分析)
start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((ui ...
- 【内核】linux内核启动流程详细分析
Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...
- 【内核】linux内核启动流程详细分析【转】
转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...
- Linux内核--网络栈实现分析(一)--网络栈初始化
本文分析基于内核Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7488828 更多请看专栏, ...
- Linux内核--网络栈实现分析(一)--网络栈初始化--转
转载地址 http://blog.csdn.net/yming0221/article/details/7488828 作者:闫明 本文分析基于内核Linux Kernel 1.2.13 以后的系列博 ...
- C# 一、语法结构、注释、命名空间、Main入口点、变量与常量、运算符、流程控制(循环)
一.代码结构 1)一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(St ...
- Linux内核中的GPIO系统之(3):pin controller driver代码分析
一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...
随机推荐
- CentOS tcpdump的使用实例
tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具. 选项: -A 以ASCII格式打印 ...
- spring-第八篇之容器中的bean的生命周期
1.容器中的bean的生命周期 spring容器可以管理singleton作用域的bean的生命周期,包括bean何时被创建.何时初始化完成.何时被销毁.客户端代码不能控制该类型bean的销毁.spr ...
- 小Z的袜子(题解)(莫队)
小Z的袜子(题解)(莫队) Junlier良心莫队 题目 luoguP1494 [国家集训队]小Z的袜子 code #include<bits/stdc++.h> #define lst ...
- luoguP2123 皇后游戏(贪心)
luoguP2123 皇后游戏(贪心) 题目 洛谷题目chuanso 题解 有一篇好题解,我就懒得推式子了,毕竟打到电脑上还是很难的 牛逼题解传送门 code #include<iostream ...
- Mint-Linux【最佳】【快速】安装微信、企业微信、TIM、QQ等软件
废话不多说 直接上教程 注意看 方式一.在线安装 在本地目录下.如 /home/root/Document 直接使用在线安装脚本,安装最新的Release版本: wget -qO- https://r ...
- 如何优雅的实现DML批量操作
如何优雅的实现DML批量操作(转载) 昨天处理了一个业务同学的数据需求,简单来说就是对一张大表做一下数据清理,数据量在8千万左右,需要保留近一个月的数据,大概是400万左右. 对于数据的删除处理,尤其 ...
- 二 shell 基础
一 文件的 权限基础 文件有三类权限 user,group,other, 权限分为 r w x 代表数字分别为 4 2 1 修改权限命令 chmod 权限还有特殊权限,在执行的时候代表某一身 ...
- lmbench的使用方法
一.引言 要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工具,一般来说为了确保测试结果的公平和权威性,会选用比较成熟的商业测试软件.但在特定情形下,只是想要简单比较不同系统或比 ...
- linux中设置虚拟域名
一.打开tomcat安装目录下conf/server.xml这个文件在server.xml文档中找到 </Engine></Service> 接着添加上面添加以下内容(暂时先说 ...
- 如何解决拖拽或者缩放、移动中的组件canvas有残留情况
当我们在做某些需求,如要拖动echarts图表,或者放大缩小 这个时候,有时连续操作,或者在ie或者内存只有8G的电脑上就会出现canvs残留的情况 我们移动的时候,使用的是transform去做的移 ...