首页
社区
课程
招聘
[求助]如何查看Ntopenprocess的函数长度
发表于: 2009-9-28 11:54 7150

[求助]如何查看Ntopenprocess的函数长度

2009-9-28 11:54
7150
看了 【原创】初学驱动——绕过DNF的Inline Hook 这篇文章
NtOpenProcess函数代码占用的大小,我只在我XP SP2 Build 2600的机子上测试通过,请大家注意这一点,用WinDbg查看下具体大小
怎么用 WINDBG 查看 一个函数的大小长度 我用U ntopenprocess 也不对 用uf 我的妈呀 老长了 作者写的长度是0X184 也不对 ,我一般不愿意来麻烦各位老大 ,但是百度GOOGLE 都找了 也没找到, 先谢谢了 帮助下小弟吧 刚学驱动 我只是想知道 调试器的各种用法
还有个问题 就是计算一段代码的长度,
80603ecf 8d45e0          lea     eax,[ebp-20h]
80603ed2 50              push    eax
80603ed3 56              push    esi
80603ed4 56              push    esi
80603ed5 8d8548ffffff    lea     eax,[ebp-0B8h]
80603edb 50              push    eax
80603edc ff75cc          push    dword ptr [ebp-34h]
80603edf ff3558a75680    push    dword ptr [nt!PsProcessType (8056a758)]
80603ee5 53              push    ebx
80603ee6 e893d3f6ff      call    nt!ObOpenObjectByName (8057127e)
80603eeb 8bf8            mov     edi,eax
80603eed 8d8548ffffff    lea     eax,[ebp-0B8h]
80603ef3 50              push    eax
80603ef4 e8cf9bf6ff      call    nt!SeDeleteAccessState (8056dac8)
80603ef9 3bfe            cmp     edi,esi
80603efb 0f8c79e9f7ff    jl      nt!NtOpenProcess+0x178 (8058287a)
我看了 论坛上的一个帖子
有位老大说是 用80603efb-80603ecf+0x6
+0X6 不明白是什么意思
是不是所有的都这么计算 还是只需要80603efb-80603ecf

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 7992
活跃值: (2566)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
晕..这问题还不好解决..

反汇编引擎嘛

ULONG TotalLenth=0;

for(ULONG CurrentAddr=(ULONG)函数;CurrentAddr!=CurrentAddr+PAGE_SIZE;++CurrentAddr)

{
   Length = SizeOfCode(cPtr, &pOpcode);
                if ((!Length)||((Length == 1) && (*pOpcode == 0xC3))||((Length == 3) && (*pOpcode == 0xC2)))
                {
                                    TotalLenth+= Length;
                                     break;
                }
TotalLenth+= Length;
}

这里就已经取得长度保存于TotalLenth....
2009-9-28 12:19
0
雪    币: 768
活跃值: (515)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
3
楼主的头像很强悍!!!
2009-9-28 12:27
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
4
谢谢2楼 不过我还是想知道 用WINDBG怎么查看 一个函数的大小
2009-9-28 12:37
0
雪    币: 7992
活跃值: (2566)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
糊涂..

用代码动态计算指令不好..

难道非要硬编码?

如果真要硬编码也简单..

对函数 u 函数 L 25(一般大多函数这个行数都够了).

就能清楚的看见函数的结尾了.结尾地址-头地址.
2009-9-28 12:59
0
雪    币: 226
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
放弃这种念头。这是不可能的。
2009-9-28 19:45
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
7
不是呀 我只是想了解下 WINDBG的操作呀 怎么计算代码的长度
2009-9-29 19:43
0
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
8
比如说某一行的代码地址为00127d38
   往下N行的地址为00127e26
之间的代码长度在windbg里可以这么计算吧:
? 00127e26-00127d38
得到的值就为代码长度

不知道对不对
2009-9-30 16:47
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
直接获取函数头地址,不是更方便吗?
2009-9-30 17:47
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
顶礼膜拜网络游侠大牛大牛大大牛
不会用windbg的飘过~
2009-9-30 22:53
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
11
他那上边是把整个函数都备份下来 知道函数头 不知道函数尾在那里 ,其实我就是想问下 怎么用WINDBG看Z整个函数函数,很简单 的一个问题,8楼说的我以前弄跳转 或备份函数头 也是用函数尾地址减去函数头得到代码长度,不过我看了一个帖子 ,上说用函数尾地址减去函数头还要加6 我就不明白怎么回事了 。谢谢大家了
2009-10-1 12:53
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
12
加6这里是加上最后一条指令的长度,因为你这里是用最后一条指令的初始地址减去首地址的,如果用最后一条的下一条指令的初始地址去减首地址就不用再加上最后一条指令的字节长度了 一个非常简单的问题怎么就没人回答呢?
2009-10-21 20:41
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
13
虽然有时候根据某些标识可以确定一个函数的长度。。但WINDOWS内部那么多函数总有些不适合。。最好还是PDB。。PDB里面就有信息
typedef struct _SYMBOL_INFO { ULONG SizeOfStruct; ULONG TypeIndex; ULONG64 Reserved[2]; ULONG Index;

ULONG Size; ----》》就是了

ULONG64 ModBase; ULONG Flags; ULONG64 Value; ULONG64 Address; ULONG Register; ULONG Scope; ULONG Tag; ULONG NameLen; ULONG MaxNameLen; TCHAR Name[1];
} SYMBOL_INFO, *PSYMBOL_INFO;
2009-10-21 21:21
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
14
谢谢大家了
2009-12-7 16:38
0
雪    币: 169
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看到13楼的有点启发
可以u NtOpenProcess  l 80
就可以看到此函数的结尾了,在最后的上面几行就是了
2010-1-10 22:29
0
游客
登录 | 注册 方可回帖
返回
//