微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WinDbg“对内存位置的无效访问” - InitializeProcThreadAttributeList

如何解决WinDbg“对内存位置的无效访问” - InitializeProcThreadAttributeList

我对 WinDbg 比较陌生,所以我希望这只是我遗漏的一些明显的东西。我有一个 .NET 程序集,其中包含使用 P/Invoke 定义的函数调用 InitializeProcThreadAttributeList、UpdateProcThreadAttribute 和 DeleteProcThreadAttributeList。所有这三个函数都是从“kernel32.dll”库中导入的。我的目标是跟踪这些函数以了解正在使用的 ntdll sys 调用

我试图用这个命令设置断点:

bp KERNEL32!InitializeProcThreadAttributeList

,但得到这个错误

Couldn't resolve error at 'KERNEL32!InitializeProcThreadAttributeList'

接下来,我使用以下命令搜索函数的任何迹象:

x kernel32!*procthread*

我收到了这个回复

00007ffd`c7598588 KERNEL32!_imp_InitializeProcThreadAttributeList = <no type information>

然后我试图在这个存根上设置断点?功能如下:

bp kernel32!_imp_InitializeProcThreadAttributeList

虽然它说断点已经定义,但当我继续执行时,它会出错:

Unable to insert breakpoint 0 at 00007ffd`c7598588,Win32 error 0n998
    "Invalid access to memory location."

我也尝试用“bu”设置断点,但产生了同样的错误

有谁知道在这种情况下如何设置断点?提前致谢!

解决方法

kernel32中的大部分功能都在kernelbase.dll中实现了 并且 kernel32 只包含一个 thunk

指示符是 IMP 表示从

导入
_imp_InitializeProcThreadAttributeList

尝试设置 bp kernelbase!InitializeProcThreadAttributeList

0:000> x /v kernel32!InitializeProcThreadAttributeList
pub func   761f4fc1             0 kernel32!InitializeProcThreadAttributeList (<no parameter info>)

0:000> u kernel32!InitializeProcThreadAttributeList l1
kernel32!InitializeProcThreadAttributeList:
761f4fc1 ff25c0181476    jmp dword ptr [kernel32!_imp__InitializeProcThreadAttributeList (761418c0)]

0:000> ? poi(kernel32!_imp__InitializeProcThreadAttributeList)
Evaluate expression: 1978493618 = 75ed6ab2

0:000> ln poi(kernel32!_imp__InitializeProcThreadAttributeList)
Exact matches:
    KERNELBASE!InitializeProcThreadAttributeList (<no parameter info>)


0:000> bp poi(kernel32!_imp__InitializeProcThreadAttributeList)
0:000> bl
 0 e 75ed6ab2     0001 (0001)  0:**** KERNELBASE!InitializeProcThreadAttributeList

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。