首页
社区
课程
招聘
[求助]谁会用LGDT这条指令?不能LGDT FWORD?请进
发表于: 2006-6-25 16:51 6828

[求助]谁会用LGDT这条指令?不能LGDT FWORD?请进

2006-6-25 16:51
6828
comment~
Windows NT/2000/XP/Server 2003 获取Ring0的便捷工具
程序创建了几个段:
IDT,GDT,SSDT,Linear
为创建Ring3,Ring0之间的互交便捷
可以直接用Int nnH,call faraddress等等方法进入Ring0,像Windows 98一样方便!
本程序在Windows XP SP2中测试。
使用Windows 2000调试ASM请加入:
IFNDEF _W2K_
_W2K_ equ 1
ENDIF
使用Windows XP调试ASM请加入:
IFNDEF _WXP_
_WXP_ equ 1
ENDIF
使用Windows Server 2003调试ASM请加入:
IFNDEF _W2003_
_W2003_ equ 1
ENDIF
编译环境:MASMPlus 1.0
有什么问题联系我:frankvista@126.com
~
;程序开始了!
.686
.model flat,stdcall
option casemap:none
;一些库文件
IFNDEF _WXP_
_WXP_ equ 1
ENDIF
include w2k\ntstatus.inc
include w2k\ntddk.inc
include w2k\ntoskrnl.inc
IFDEF _W2K_
include w2kundoc.inc
ENDIF
IFDEF _WXP_
include wxpundoc.inc
ENDIF
IFDEF _W2003_
include wnetundoc.inc
ENDIF
includelib ntoskrnl.lib
include Strings.mac

KGDTREG STRUC
Limit WORD ?
Base  DWORD ?
KGDTREG ENDS

KIDTREG STRUC
Limit WORD ?
Base  DWORD ?
KIDTREG ENDS

.data?
;数据段开始
GDTR KGDTREG <?,?>
IDTR KIDTREG <?,?>
pGDT DWORD ?
PGDTR DWORD ?
;代码段开始
.code
;保留
.code Init
main proc pDrvObj,pRegPath ;我为什么要DriverEntry proc pDriverObject:PDRIVER_OBJECT,pusRegistryPath:PUNICODE_STRING呢?以后不注释了!
local segIDT:KGDTENTRY,segGDT:KGDTENTRY,segSSDT:KGDTENTRY,segLinear:KGDTENTRY
;开始

        push edi
        sgdt GDTR
        mov edi,GDTR.Base
        mov pGDT,edi
        sidt IDTR
        movzx eax,GDTR.Limit
        lea eax,[sizeof KGDTENTRY+eax*sizeof KGDTENTRY]
        add eax,edi
        pop edi
        assume eax:ptr KGDTENTRY
        mov [eax].LimitLow,0FFFFH
        mov edx,IDTR.Base
        mov [eax].BaseLow,dx
        shr edx,16
        mov [eax]._HighWord.Bytes.BaseMid,dl
        shr dx,8
        mov [eax]._HighWord.Bytes.BaseHi,dl
        mov edx,[eax]._HighWord.Bits
        or edx,mask u15Granularity
        or edx,mask u15Default_Big
        and edx,not mask u15Reserved_0
        and edx,not mask u15Sys
        or edx,mask u15LimitHi
        or edx,mask u15Pres
        or edx,mask u15Dpl
        or edx,mask u15Type
        mov [eax]._HighWord.Bits,edx
        inc GDTR.Limit
        mov PGDTR,offset GDTR
        lgdt PGDTR ;lgdt GDTR也有相同错误
        mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
        ret

;结束
main endp
end main

E:\MASMPlus\Project\Console\Driver.asm(99) : error A2085: instruction or register not accepted in current CPU mode

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
.686P
2006-6-25 17:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
E:\MASMPlus\Project\Console\Driver.asm(99) : error A2024: invalid operand size for instruction
2006-6-25 21:35
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
PGDTR应该为指向6字节的地址。
修改后:
PGDTR dw ?     界限
      dd ?     32位线性地址
指令:
LGDT [offset PGDTR]

再如sidt [esp-2],[esp-2]也是6字节,前面2字节界限,后面4字节才是32位线性地址。
查一下Intel指令手册就知道用法。没必要提问。
2006-6-25 21:53
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
.686P

.data
Gdtptr fword 0

.code
lgdt fword ptr Gdtptr

看这贴:
http://bbs.pediy.com/showthread.php?s=&threadid=21251
2006-6-26 08:59
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
KGDTREG STRUC
Limit WORD ?
Base  DWORD ?
KGDTREG ENDS
你不是已经定义了?难道不会用?保存(SGDT)时你知道用这个结构,为何LOAD时(LGDT)就不会用这个?
2006-6-26 12:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不是说过了吗?用了有Error.包括Offset和变量本身,以后我把两个程序全弄上来
2006-6-26 14:23
0
雪    币: 15010
活跃值: (6218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
其他不动,只要修改为:
  lgdt fword ptr [offset GDTR]
  mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
  ret
2006-6-26 14:41
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
最初由 tDasm 发布
其他不动,只要修改为:
lgdt fword ptr [offset GDTR]
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret


失踪了2年多?
2006-6-26 15:16
0
雪    币: 98674
活跃值: (200999)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
AGAIN
2006-6-26 15:17
0
游客
登录 | 注册 方可回帖
返回
//