首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在windbg中,如何在kernel32.dll中的所有函数上设置断点?

在 Windows 调试器 WinDbg 中,要在 kernel32.dll 中的所有函数上设置断点,可以使用以下步骤:

  1. 首先,使用 WinDbg 打开目标进程或内核模式调试。.symfix C:\Symbols .reloadbp kernel32!CreateFileW.foreach (FuncName {ls kernel32!*}) { bp kernel32!$FuncName }这个脚本会将 kernel32.dll 中的所有函数名称放入 FuncName 变量中,并使用 bp 命令在每个函数上设置断点。
  2. 加载符号文件,以便 WinDbg 能够识别 kernel32.dll 中的函数名称。可以使用以下命令加载符号文件:
  3. 使用 x kernel32!* 命令查看 kernel32.dll 中的所有函数。
  4. 使用 bp kernel32!function_name 命令在 kernel32.dll 中的指定函数上设置断点,例如:
  5. 如果要在所有函数上设置断点,可以使用以下批处理脚本:

需要注意的是,在 kernel32.dll 中的函数数量非常大,设置这么多断点可能会导致调试器性能下降,因此在实际调试中需要谨慎使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows反调试技术简单讲解(用户模式篇)

实验环境 Windows 11 22H2 x64 Visual Studio 2022 (安装了C++桌面开发组件) WinDbg Preview 备注:这个是笔者实验环境...,叫IsDebuggerPresent 照着文档用就行 下面是一个简单测试: 这里笔者使用了Windbg和Visual Studio内置调试器,都可以正常识别 其实WindowsPEB...BeingDebugged标志为TRUE之后,还有别的操作,鉴于笔者没有具体研究过这些变化,故这里不再深入(有时间可以单独补一篇) 方式2:线程隐藏调试 从Windows 2000开始,微软一个内部函数上提供了这个功能...其效果是:对指定设置了隐藏调试线程,打断点断点不断,且程序会退出 原理是:Windows对设置了线程隐藏调试线程,出现异常不会通知调试器,又因为异常没有处理,会直接终止进程 (说明:...) 为啥有这么一招,这还要说说Windows调试器是如何在附加时让被调试器断下来 原理太简单了:创建一个远程线程,执行DbgUiRemoteBreakin,DbgUiRemoteBreakin内部触发

1K20

驱动开发:WinDBG 常用调试命令总结

Windbg是Microsoft公司免费调试器调试集合GUI调试器,支持Source和Assembly两种模式调试。Windbg不仅可以调试应用程序,还可以进行Kernel Debug。...address 0x77c000 // 查看该地址处内存属性 bl // 列出所有断点 bc * // 清除所有断点 be * // 启用所有断点 bd * // 禁用所有断点 bc...1 2 5 // 清除1号、2号、5号断点 be 1 2 5 // 启用1号、2号、5号断点 bd 1 2 5 // 禁用1号、2号、5号断点 bp main // main函数开头设置一个断点...bp 0x7c801b00 // 7c801b00地址处放置一个断点 bp main.exe+0x1032 // 模块MyDll.dll偏移0x1032处放置一个断点 bp @$exentry...// 进程入口放置一个断点 bm message_* // 匹配message_开头函数,并在这些函数起始处都打上断点 堆栈操作 k // 显示当前调用堆栈 kn // 带栈编号显示当前调用堆栈

84520
  • 为异常处理做准备,熟悉一下WinDbg工具

    为异常处理做准备,熟悉一下WinDbg工具 马上开始异常处理第二讲,但是讲解之前,还有熟悉一下我们WinDbg工具,当然你如果熟悉这个工具,那么就可以不用看了....,将看不到WinDbg翻译出来函数了 这个是OD做不到,你调用什么函数,WinDbg都能知道,归功于符号路径设置 CTRL + S 打开符号路径设置,或者菜单点击 ?...:\symbolsloca,你可以随便改动,就是符号路径下载位置是哪里. 2.常用调试手法 WinDbg和OD不一样,快捷键也有区别了 它快捷键适合VC++6.0一样 F9 设置断点 F5 运行...三丶WinDbg常用命令 WinDbg常用命令很多.具体可以搜索MSDN这里只简单列举一下 1.断点指令 bp 命令,设置断点 bm 命令,设置执行符号断点,可以多个符号下段点 ba  命令,设置内存访问断点...基于x86处理器,显示器还包括调用约定信息 n 显示调用栈每帧编号 f 显示调用栈每帧占用字节数 默认情况下使用k显示当前线程栈,如果加上线程命令前缀,可以查看某个线程栈,~* k查看所有线程栈

    1.2K110

    DllMain不当操作导致死锁问题分析--导致DllMain死锁关键隐藏因子

    后就停住了,光标闪动,貌似还是等待我们输入。可是我们怎么敲击键盘都没有用:它死锁了。         我是VS2005调试该程序,于是我们可以Debug->Break All来冻结所有线程。...与之相对应KiFastSystemCall函数是用户态进入内核态必要调用方法。因为内核态代码我们是无法查看,所以动态断点只能设置到KiFastSystemCallRet开始处。...我们《DllMain不当操作导致死锁问题分析--死锁介绍》中介绍过,死锁存在条件是相互等待。主线程,我们发现其等待是工作线程结束。那么工作线程等待主线程什么呢?...正如其名,该字段指向是TIB结构体进程空间中虚拟地址。为什么要指向自己?那我们是否可以直接使用FS:[0]地址?不可以。举个例子:我用windbg挂载到我电脑上一个运行calc(计算器)。...于是我们得出以下结论: 进程内所有线程共用了同一个临界区来序列化DllMain执行。

    1.5K20

    1.5 编写自定位ShellCode弹窗

    为什么要查找Kernel32.dll地址而不是User32.dll,这是因为我们最终目的是调用MessageBoxA这个函数,而该函数位于 User32.dll这个动态链接库里,某些程序User32...5.初始化链表存放就是所有进程模块信息,通过将偏移值加0x08读者即可获取到kernel32.dll基地址。...Windbg可以不重启系统情况下,通过连接到正在运行进程或者操作系统内核,获取并分析程序运行信息、内存状态、寄存器状态、线程状态、调用堆栈等数据,并可以使用符号文件来解析程序符号名,从而帮助开发者定位问题和进行深入调试...循环遍历完字符串所有字符后,哈希值即为最终计算结果。...WinDBG调试器已经找到了Kernel32.dll这个动态链接库基地址,而Dll文件本质上也是PE文件,Dll文件同样存在导出表,其内部记录着该Dll导出函数。

    38530

    0x000000fc (ATTEMPTED EXECUTE OF NOEXECUTE MEMORY)

    gle //设置断点技巧 可以直接把断点设在: kernel32!BaseProcessStart 1), 先用lm 显示所有已经加载模块 2), dt our_exe_name!...内存访问断点 6、下内存访问断点 WinDbg,ba命令代表Break On Access,即访问时中断。...我们命令行输入: ba r 1 0044108c 命令意思是在内存0044108c位置下字节断点。命令各元素含义可以参考帮助文档,这里不啰嗦。...断点之于调试当然是非常重要 常用命令: bp [Address]or[Symbol] 指定地址下断 可以使用地址或符号, bp 80561259(Windbg默认使用16进制) bp...DriverEntry, 然后加载这个驱动时就可以断驱动入口,并且这个是不需要调试符号支持 bl 列出所有断点,L=List bc[id] 清除断点,c=Clear,id是bl查看时断点编号

    1.3K10

    1.5 编写自定位ShellCode弹窗

    为什么要查找Kernel32.dll地址而不是User32.dll,这是因为我们最终目的是调用MessageBoxA这个函数,而该函数位于 User32.dll这个动态链接库里,某些程序User32...5.初始化链表存放就是所有进程模块信息,通过将偏移值加0x08读者即可获取到kernel32.dll基地址。...Windbg可以不重启系统情况下,通过连接到正在运行进程或者操作系统内核,获取并分析程序运行信息、内存状态、寄存器状态、线程状态、调用堆栈等数据,并可以使用符号文件来解析程序符号名,从而帮助开发者定位问题和进行深入调试...循环遍历完字符串所有字符后,哈希值即为最终计算结果。...WinDBG调试器已经找到了Kernel32.dll这个动态链接库基地址,而Dll文件本质上也是PE文件,Dll文件同样存在导出表,其内部记录着该Dll导出函数。

    24420

    浅谈hook攻防

    所以说,我们可以系统自定义钩子,用来监视系统特定事件发生,完成特定功能,屏幕取词,监视日志,截获键盘、鼠标输入等等。...钩子可以分为线程钩子和系统钩子,线程钩子可以监视指定线程事件消息,系统钩子监视系统所有线程事件消息。...因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立动态链接库(DLL) 。...进程当EXE模块调用CreateFile()函数时候,会去调用kernel32.dll模块CreateFile()函数,因为真正CreateFile()函数实现在kernel32.dll模块...寄存器里面,设置dr7L0位为1即局部有效,断点长度设置为1即18、19位设置为0即可,断点类型设置为访问断点对应值为0(20、21位设置为0),这样dr7寄存器1-31位都为0,32位为1,所以将

    1.1K10

    1.5 编写自定位ShellCode弹窗

    为什么要查找Kernel32.dll地址而不是User32.dll,这是因为我们最终目的是调用MessageBoxA这个函数,而该函数位于 User32.dll这个动态链接库里,某些程序User32...5.初始化链表存放就是所有进程模块信息,通过将偏移值加0x08读者即可获取到kernel32.dll基地址。...Windbg可以不重启系统情况下,通过连接到正在运行进程或者操作系统内核,获取并分析程序运行信息、内存状态、寄存器状态、线程状态、调用堆栈等数据,并可以使用符号文件来解析程序符号名,从而帮助开发者定位问题和进行深入调试...循环遍历完字符串所有字符后,哈希值即为最终计算结果。...WinDBG调试器已经找到了Kernel32.dll这个动态链接库基地址,而Dll文件本质上也是PE文件,Dll文件同样存在导出表,其内部记录着该Dll导出函数。

    31620

    浅谈 Windows Syscall

    如果熟悉 ntdll.dll 的话会知道,ntdll.dll 一部分导出函数都是采用这种形式, NtCreateProcess: 代码几乎一样,区别在于 mov eax 0B4h,也就是执行syscall...结合 Windbg 查看, ntdll!...其具体含义是先解析 Ntdll.dll 导出地址表 EAT,定位所有以 “Zw” 开头函数,将开头替换成 “Nt”,将 Code stub hash 和地址存储 SYSCALL_ENTRY...结构,存储系统调用索引是SSN(System Service Numbers,系统服务编号)。...用法与 Syswhispers 大致相同,不同点在于,使用时会生成三个文件: 导入时要将 syscall.c 也导入到源代码 syscall.c 存储着系统调用地址排序和哈希比较功能。

    5.6K62

    IE 11浏览器0day漏洞(CVE-2015-2425)UAF分析

    windbg+IDA分析 由于崩溃一个不可访问地址,不好确定之前指令,这时需要用到与栈回溯相关命令,就是windbgk一系列命令: ?...由此可知崩溃返回地址是63dfcf3c,JavascriptFunction::CallFunction,看当前esp也可以得出同样结论: ?...看到回到了上层函数,eip值为崩溃处返回地址,反汇编窗口可以看到上层函数,也可以用u命令: ?...eax里存放应该是NativeCodeGenerator::CheckCodeGen返回值,这次在这个函数上断点再次调试,会触发六次断点返回前调用了NativeCodeGenerator::CheckCodeGenDone...断点触发时,09f90000还没有被释放,函数返回时已经被释放了,内存就是用FreeAllocations来释放,EmitBufferManager类还有NewAllocation函数,应该是分配内存函数

    1.3K70

    DllMain不当操作导致死锁问题分析--导致DllMain死锁关键隐藏因子2

    本文介绍使用Windbg去验证《DllMain不当操作导致死锁问题分析--导致DllMain死锁关键隐藏因子》结论,调试对象是文中刚开始那个例子。...其实该程序自己运行起来线程只有ID为0、TID为afc线程。18c4线程是我们windbg输入ctrl+break,导致windbg我们调试进程插入一个中断线程。...8 baw2 0x7c99e178 对LockCount设置断点         9 g          10kb 我们看到线程号是1,即Windbg插入线程导致断点,我们忽略之(我们看到关闭线程时也会进入临界区...28 control+break windbg要启动一个中断线程,中断线程触发了断点 ?         29 ~ 查看线程,ID为2就是windbg插入线程 ?        ...34 dt _RTL_CRITICAL_SECTION 0x7c99e174  查看临界区所有权,从线程TID我们可以看到,临界区的确是被主线程占着。 ?

    72530

    漏洞分析丨CVE-2012-1873

    一、漏洞简述 cve-2012-1873同样是一个著名堆溢出漏洞,他是IE6-8MSHTL.dllCTableLayout::CalculateMinMax函数里,程序执行时会以HTML代码元素...用IE打开,卡在这里,接下来用WIndbg附加: g起来,让他走 然后回到IE,选择允许运行 然后因为页堆保护,断了溢出位置,mshtml!...CTableLayout::CalculateMinMax函数下断点,看看溢出原因是什么,所以重新运行IE,用windbg附加IE,重复之前操作,附加之后对函数mshtml!...至于Span为啥是9,因为我们分析时候会知道,分配堆大小是span值* 0x1C,这里9* 0x1c=FC,是CButtonLayout大小(待会会在Windbg查看)。...,所以这里判断这个串是不是很长,确定是我们溢出BBB串,按照字节读取到虚函数地址,便于查看我们打印出来验证,根据相同步骤获取到虚函数地址那里: 然后看看mshtml基址: 随后取消所有断点,go起来

    23410

    CC++ 编写并提取通用 ShellCode

    ---- 既然有了固定公式,接下我们就使用WinDBG调试器来手工完成对 Kernel32.dll 地址定位: 1.首先我们运行 WinDBG调试器,然后按下【Ctrl + K】选择文件(File)...0x4fd18963 LoadLibraryA 0x0c917432 解析 kernel32.dll 导出表 开头部分我们通过 WinDBG 调试器已经找到了 Kernel32....dll 这个动态链接库基地址,而Dll文件本质上也是PE文件,Dll文件存在一个导出表,其内部记录着该Dll导出函数。...函数 RVA 地址和名字按照顺序存放在上述两个列表,我们可以列表定位任意函数RVA地址,通过与动态链接库基地址相加得到其真实VA,而计算地址就是我们最终 ShellCode 调用时需要地址...pushad ; 保护所有寄存器内容 mov eax,[ebp+0x3C] ; 指向PE文件头 mov ecx

    49820

    利用特殊协议加载本地文件, 绕过 HTML5 沙箱, 打开弹窗诸事

    例如,将 iframe location 设置为 “read:” 就足以使浏览器崩溃,包括所有选项卡。想看看吗?...一旦附加上去,只需要按 F5 或者 WinDbg 按 g [回车],使 Edge 保持运行。这是我屏幕现在看起来样子。...事实上,他名字让我觉得它是加载 HTML 崩溃之前断下程序的话,这将会变得有意思多了,所以为什么不在 _LoadRMHTML 上面几行设置断点呢?...我们先从那个断点(函数+偏移)查看反汇编。这很简单, WinDbg 中使用 “ub” 命令。 0:030> ub EdgeContent!...有了这些信息,我们可以 Edge 调用之前设置一个断点,看看 RCX 在那个确定时刻有何值。但是我们重新启动一遍程序吧,因为这时已经有点迟了:Edge 已经崩溃了。

    2.4K80

    Nebula漏洞利用包CVE-2016-0189漏洞利用分析

    我们可以VBScript代码插入IsEmpty()函数,然后windbgvbscript!IsEmpty() 函数上设置断点来观察内存[3]。 ? 图1 调试用VBScript代码 ?...当访问数组元素时,VBScript引擎会调用 AccessArray 函数来计算元素存放地址。 试着用windbg 调试如下代码, vbscript!AccessArray处下断点: ? ?...需要注意是,由于脚本中有大量数组操作,如果我们AccessArray函数上断点,可能会断下很多次。...这里介绍一个小技巧:先将断点用bd命令禁掉,在想断下VBScript 脚本前加入MsgBox函数,当MsgBox弹出后,我们再把断点用be命令恢复。这样就可以确保断我们想断地方。...这次我们占位内存,成功构造如下数据: ? Aw.cod(1,2) 将越界访问到 我们构造占位内存 地址0x2f72878。

    1.5K60

    漏洞丨cve2017-11882

    四、漏洞分析首先我们需要找到溢出点,既然他弹出一个计算器,那么我们可以对CreateProcess函数或者WinExec下断点,尝试找到关键地方,用windbg附加office 2007,然后CreateProcess...父进程存在PID,但是列表却找不到PID为1404进程,卡顿许久,猜测或许是cmd父进程隐藏了自己或者启动时间太短,启动完自己结束。...在这里我们需要设置一下注册表,因为EQNEDT32.exe这个程序是被word带起来,而他又会很快结束,所以需要设置此程序启动就被附加:HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT...以及call这条语句下断点:然后关闭word,重新双击exp,然后OD运行起来:可以看到他停在了call这条语句,并没有执行push eax,在这里我们可以判断出应该是上个函数返回值直接跳到了WinExec...我们注意F7进去第一个call:首先给他下个断点,预防他是关键函数,然后再F8:可以看到这里就是关键函数,刚走过这个函数就断了WinExec函数上,我们重新调试,让断刚才下断点上,F7跟进去调试

    42200

    ObjectDataSource选择业务对象列表为空探讨

    前天晚上,一个页面上拖了一个ObjectDataSource,配置数据源时发现选择业务对象列表没有列出当前项目的实体类,甚至连NewLife.CommonEntity实体类也没有列出来。...源代码控制就是好,可以记录编码过程点点滴滴!似乎也没什么用,那天修改几个问题,都是改一下函数内部处理代码而已,vs加载实体类型时,不会执行到里面的代码。于是又断线了!    ...很不情愿安装了非常不熟悉WinDbg。太久不用,都生疏了,光是设置就花了几个小时。...以前WinDbg手册和SOS手册也都找不着了……到园子里找了十几二十篇文章临时看了一下,边看边折腾,基本操作终于学会了。     1,设置符号路径。最好下载操作系统符号库安装。    ...6,bp下断点,OD中一直很讨厌指令下断点,这里不得不用,谁让WinDbg只有这么一个呢!

    1.4K70
    领券