首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何获取别的程序的 ESP 的值? [已结贴,结贴人:r_swordsman]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-19 14:39:01 楼主
    解决了开贴点名给100分。
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • titilima
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 14:56:311楼 得分:100
    使用GetThreadContext可以获得某个线程的上下文环境,其中包括ESP。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 09:08:022楼 得分:0
    代码如下:

    C/C++ code
    if(!(dwWindowThreadID = GetWindowThreadProcessId(hCurrentWindow, &dwWindowProcessID))) return FALSE; // debug context CONTEXT ct; HANDLE hl = OpenThread(THREAD_ALL_ACCESS, FALSE, dwWindowThreadID); if(hl == NULL) { ShowLastErrorMessage(hCurrentWindow); } else { if(!GetThreadContext(hl, &ct)) ShowLastErrorMessage(hCurrentWindow); }


    可是运行之后为什么没报错?即GetThreadContext返回TRUE,但 ct 的成员都是 0?

    C/C++ code
    - ct {ContextFlags=0xcccccccc Dr0=0x00000000 Dr1=0x00000000 ...} _CONTEXT ContextFlags 0xcccccccc unsigned long Dr0 0x00000000 unsigned long Dr1 0x00000000 unsigned long Dr2 0x00000000 unsigned long Dr3 0x00000000 unsigned long Dr6 0x00000000 unsigned long Dr7 0x00000000 unsigned long + FloatSave {ControlWord=0x00000000 StatusWord=0x00000000 TagWord=0x00000000 ...} _FLOATING_SAVE_AREA SegGs 0x00000000 unsigned long SegFs 0x00000000 unsigned long SegEs 0x00000000 unsigned long SegDs 0x00000000 unsigned long Edi 0x00000000 unsigned long Esi 0x00000000 unsigned long Ebx 0x00000000 unsigned long Edx 0x00000000 unsigned long Ecx 0x00000000 unsigned long Eax 0x00000000 unsigned long Ebp 0x00000000 unsigned long Eip 0x00000000 unsigned long SegCs 0x00000000 unsigned long EFlags 0x00000000 unsigned long Esp 0x00000000 unsigned long SegSs 0x00000000 unsigned long + ExtendedRegisters 0x0012f918 "烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫f" unsigned char [512]
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • titilima
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 09:38:123楼 得分:0
    You cannot get a valid context for a running thread. Use the SuspendThread function to suspend the thread before calling GetThreadContext.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:46:084楼 得分:0
    我早试过了,不行啊,好像没那么简单。你能试试吗?
    C/C++ code
    CONTEXT ct; HANDLE hl = OpenThread(THREAD_ALL_ACCESS, FALSE, dwWindowThreadID); if(hl == NULL) { ShowLastErrorMessage(hCurrentWindow); } else { if(SuspendThread(hl) < 0) { ShowLastErrorMessage(hCurrentWindow); } else { if(!GetThreadContext(hl, &ct)) ShowLastErrorMessage(hCurrentWindow); if(ct.Esp != 0) MessageBoxA(hCurrentWindow, "ESP VALID.", "OK", 0); ResumeThread(hl); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • titilima
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:39:505楼 得分:0
    你是在哪步出的问题?我用这个代码是没问题的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:15:076楼 得分:0
    看看你的测试程序的代码,可以不?
    我4楼贴的代码,不会出错,GetThreadContext 也返回 TRUE,但是ct 的所有自动都是 0.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • titilima
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:16:167楼 得分:0
    C/C++ code
    HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, 0x5b0); SuspendThread(hThread); CONTEXT c; BOOL b = GetThreadContext(hThread, &c); ResumeThread(hThread);

    0x5b0是用来测试的一个线程,一个记事本窗口所属的线程ID。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:08:538楼 得分:0
    试了你上面的代码,还是不行啊 c.Esp 为 0,所有成员都是 0。
    你运行看看,这些成员的值是不是都是0?
    你看过了没?都正确?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 08:53:089楼 得分:0
    试好了没?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • titilima
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 11:11:3210楼 得分:0
    - c {ContextFlags=0xcccccccc Dr0=0x00000000 Dr1=0x00000000 ...} _CONTEXT
    ContextFlags 0xcccccccc unsigned long
    Dr0 0x00000000 unsigned long
    Dr1 0x00000000 unsigned long
    Dr2 0xffff0000 unsigned long
    Dr3 0x00001f80 unsigned long
    Dr6 0x0000ffff unsigned long
    Dr7 0x00000000 unsigned long
    + FloatSave {ControlWord=0x00000000 StatusWord=0x00000000 TagWord=0x00000000 ...} _FLOATING_SAVE_AREA
    SegGs 0x00000044 unsigned long
    SegFs 0x00000000 unsigned long
    SegEs 0x00000000 unsigned long
    SegDs 0x000000bf unsigned long
    Edi 0x77fcc603 unsigned long
    Esi 0x77fcc4c9 unsigned long
    Ebx 0x77fcc4e0 unsigned long
    Edx 0x000000bf unsigned long
    Ecx 0x77fcc603 unsigned long
    Eax 0x77fcc4c9 unsigned long
    Ebp 0x77fcc4e0 unsigned long
    Eip 0x00000000 unsigned long
    SegCs 0x00000214 unsigned long
    EFlags 0x00000000 unsigned long
    Esp 0x00000010 unsigned long
    SegSs 0x010b03d8 unsigned long
    + ExtendedRegisters 0x0012fd54 "烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫?" unsigned char [512]
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 13:57:2111楼 得分:0
    能不能把你所有的代码都贴出来,我去编译看看?
    为什么我都是0?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • titilima
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:43:2912楼 得分:0
    所有的代码就是这些,外面就是一个main。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:38:1113楼 得分:0
    难道和系统有关系?我的是2003,你的呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • titilima
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:45:2714楼 得分:0
    我的是2k sp4 pro,2k3没有试过,看看提高权限是否可行?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 08:43:5515楼 得分:0
    我试试看吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-26 09:07:2816楼 得分:0
    ding
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tringcooler
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-14 21:23:5017楼 得分:0
    需要先
    ct.ContextFlags=CONTEXT_FULL;

    ……我之前也为这问题困扰好久……结果是标志没放对……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-16 09:11:4818楼 得分:0
    我试试..谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-16 09:28:4519楼 得分:0
    引用 17 楼 tringcooler 的回复:
    需要先
    ct.ContextFlags=CONTEXT_FULL;

    ……我之前也为这问题困扰好久……结果是标志没放对……


    很感谢你,现在可以了。
    都怪自己太粗心,参数说明都没看仔细。
    谢谢啊
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved