100请教handle.handle table.

GR 2003-11-10 04:53:51
win98.我GetCurrentProcess得到的值。数值相当大。这个值难道是索引?,jeff的核心编程我看过的。我想明白GetCurrentProcess得到的这个值怎么去转变成内核对象的地址。如果说GetCurrentProcess得到的handle是1 的话。我倒是可以理解。从handle table.中去索引第一个地址。但是这个handle相当大。我用softice看了一下。proc handle table 确实是按索引来排内核对象的。那么这个GetCurrentProcess到底是怎么在具体运转的呢。

//我提问题基本上都是一有答案马上结贴的。
...全文
28 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
GR 2003-11-11
  • 打赏
  • 举报
回复
我知道最终的结果就是去拿process内核数据库的真正地址。应该是这样吧。

这一系列的动作是如何完成的。请指点一下。
GR 2003-11-11
  • 打赏
  • 举报
回复

void main()

{
HANDLE hProcess = GetCurrentProcess;

cout << DWORD(hProcess) << endl;
cin.get();
}

WIN98 ,SE 第二版本
调试的时候,观测hProcess的值必定是在8xxxxxxx以上。我不明白这个值是有什么意义。但是cout可以奇迹般的拿到GETcurrentprocess的地址。是0xBFFF96684 ,
这个地址就做这件事情。
mov eax,0x7fffffff
ret



楼上的兄台。如果你知道细节的话。请指点我一下。万分感谢。分不够可以加。

。我很糊涂,但是我知道可以通过追踪cout来找到答案。可是cout好长。
vcforever 2003-11-11
  • 打赏
  • 举报
回复
我是这么认为的,GetCurrentProcess函数根据本进程的一些信息比如进程的ID,返回一个标识该进程的伪句柄,这个函数并不在进程句柄表中创建新的索引(也就是句柄),也不会改变核心对象的引用计数,他通过ProcessId和实句柄维系在一个核心对象上,因为句柄是进程有效的,而processid则是在系统内都有效的!虽然伪句柄和实句柄的句柄值不同,但他们都是表示一个进程的!

上面是我个人的看法,有不对的地方还请指正!大家继续讨论
roger_ding 2003-11-11
  • 打赏
  • 举报
回复
GetCurrentProcess 一直是返回0x7FFFFFFF这个伪句柄。KERNEL32 把它解释为“使用现在的进程”,当有需要使用 process handle 的 KERNEL32 函数碰到它时会把它替换成为真正的 process handle。
GR 2003-11-11
  • 打赏
  • 举报
回复
刚刚又调试了一下。这次做了个比较。



00401058 A1 AC D1 42 00 mov eax,[__imp__GetCurrentProcess@0 (0042d1ac)]
0040105D 89 45 FC mov dword ptr [ebp-4],eax


这个是在vc下调试器得到的信息。ebp-4 在我的机器上0065fdf4,为了方便。以下我就写这个地址了。。0065fdf4,这个地址上我得到的是一个莫名其妙的值,每次都不一样。值都在3GB以上。
===================================
mov [ebp-hProcess]
这个是s-ICE里得到的。

0065fdf4中的数值就竟然是GETcurrentprocess的地址。是0xBFFF96684

=========================
但是很奇怪的事情我实在搞不懂了。为什么同一个地址。在两个调试器里会有不一样?(我从头跟踪到最后的),而在vc里。我最后的cout输出是能正确的输出0xBFFF96684 ,按照vc的结构。
cout去哪里找这个值。







roger_ding 2003-11-11
  • 打赏
  • 举报
回复
注:在win9x下
GetCurrentProcess只是简单返回0x7fffffff,若有函数需要process handle,而用0x7FFFFFFF作为handle传入的话,该api会知道表示是当前process handle,而后该干吗干吗去...
还有一种方法得到process handle:
DWORD dwProcessID = GetCurrentProcessID():
HANDLE hProcess = OpenProcess(dwProcessID);
该handle是真正的存在于process handle table 中
fhqiplj 2003-11-10
  • 打赏
  • 举报
回复
句柄是系统资源的
系统分配的时候要考虑好多因素的
bluebohe 2003-11-10
  • 打赏
  • 举报
回复
相对应的所有句柄转化为地址都会有这个问题
也许只是一个首地址?
听课
课程亮点: 从无到有、手把手教你编写CA/TA,快速上手,快速部署项目标准的开发,开发一套CA/TA,可部署到不同的TEE OS上。受益人群: 汽车行业主机厂、tier1、SOC芯片公司的安全部门同事手机行业,ODM/OEM、SOC芯片公司的安全部门同事学生课程收益: 熟悉CA/TA开发的步骤和流程。快速上手,快速搭建自己开发环境。熟悉各类TEE、基于各类TEE的CA/TA开发步骤。搭建自己的安全平台熟悉各类常规安全应用熟悉tee密码学算法、tee存储  课程大纲  Hello大家好,上架一门新的视频课程,课程主要包含两大部分,第一部分搭建环境,第二部分从无到有的编写代码。带领大家手把手编写。 具体大纲如下:(1)qemu v8环境搭建- 搭建一个qemu_v8的环境,用于跑BL1-->BL2-->BL31-->BL32-->BL33-->Linux kernel;- 直接使用已搭建好的镜像- 工程使用以及说明(2)CA/TA开发编程实践从无到有编写代码,已完成的大纲如下:- 2秒钟快速编写(clone)一组CA/TA程序- 安全存储详解以及代码示例- CA到TA双向传参数的四种方式(value、temref、memref),区别?优缺点?- 对称密码学算法aes的使用,CBC/ECB/CTR/XTS分组密码的使用,加密解密,pending等- aeskey的操作,如何随机生成aeskey(TEE_GenerateKey),objectHandle和aesbuf有什么区别? 如何将handle- 认证加密算法,如aes-GCM的使用- 非对称密码学算法RSA的使用,包括加密、解密、签名、验签- RSA key的处理,包含如何生成RSA KEY,rsakey object如何转换成可见的数组,如何转换der,如何转换pem,反向又如何转换- ECC/ECDSA的使用- 国密sm2 sm3 sm4的使用.  其中sm4包含加密、解密、签名、验签等- encode和decode的实现- TA属性的定制以及API的使用- 数字摘要  SHA1 sha224 sha256 sha384 sha512等- 消息认证码 HMAC- TEE侧获取时间的函数有哪些(TEE_GetSystemTime、TEE_GetREETime),有什么区别?分别是怎样使用的? - 如何获取随机数(TEE_GenerateRandom)?- TA调用TA的示例和演示后续可能继续补充的如下(也欢迎大家提需求):- multi-session和multi-instance的使用- CA LOGIN flag的使用 

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧