标题:windows内核开发中遇到一点关于汇编的问题,求高手解答。
只看楼主
asdiopss
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-9-23
结帖率:0
已结贴  问题点数:10 回复次数:5 
windows内核开发中遇到一点关于汇编的问题,求高手解答。
先说下自己的设计思路
我在disablepatchgurad的过程中  要用到一个非文档化的函数,有两个解决方案,一个是在应用层下载符号表来找,二个是在内核注册个dpc例程,然后通过回溯获得
我选择第二种(总觉得一个内核程序还是尽量少依靠R3程序比较好)

既然思路有了 那么就是实现了  我的想法是  进入DPC例子后  当前ESP值肯定保存的是这个DPC完成之后的返回值
那么我有
PVOID testadd=NULL
__asm
{
    mov eax,esp
    mov testadd,eax
}
当我编译调试后 发现最后testadd中的值是堆栈地址 而不是该地址中的值
于是我又想
__asm
{
   pop eax
  mov testadd,eax
}
结果还是不行
本人没深入接触过汇编,特来求助
希望大神能解答下
附图

图片中红色箭头指向的是当前堆栈栈顶
黑色箭头指向的是我想要的值
红色方框是我写的汇编代码。
求大神指点 该怎么写!感激不尽
搜索更多相关主题的帖子: windows 内核 开发 汇编 mov 
2018-03-06 17:24
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:10 
试试
mov eax,[esp]
mov testadd,eax
2018-03-06 18:34
asdiopss
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-9-23
得分:0 
回复 2楼 Valenciax
试过 取出来的数值不对
2018-03-06 19:27
asdiopss
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-9-23
得分:0 
回复 2楼 Valenciax
代码如下
#pragma LOCKEDCODE
VOID PgTempDpc(
    IN struct _KDPC *Dpc,
    IN PVOID DeferredContext,
    IN PVOID SystemArgument1,
    IN PVOID SystemArgument2
    )
{
    //先保存原始eax到全局变量里
    __asm{
        mov tempeax, eax
            mov eax, [esp]
            mov address,eax
            mov eax,tempeax
    }
    DbgPrint("%x", address);
    DbgPrint("enter the dpc\n");
    return;
}



2018-03-06 19:43
asdiopss
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-9-23
得分:0 
回复 2楼 Valenciax
问题解决了
应该是用esp+4
mov eax,[esp+4]
谢谢版主
2018-03-06 19:48
asdiopss
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-9-23
得分:0 

最后测试
通过符号表获得的函数地址和回溯法获得的地址一样
2018-03-06 19:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485043-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065713 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved