Make a Windbg By Yourself

【前端HTML生成条形码——MQ】 本文将展示前端HTML如何根据用户输入内容生成对应的条形码,附HTML和JS代码。代码如下(示例): 阅读详情
Windbg 的工作实质是连接windows的内核调试,windows已经把内核调试的机制集成进了内核,只需要连接windows的内核调试接口,完全不需要想softice一样挂接很多中断处理过程就能实现内核调试,
关于这个的详细介绍请参考 Windows内核调试器原理浅析
http://www.xfocus.net/articles/200412/765.html

曾经听说过themida大牛说.windbg不过是一个demo,完全能够自己写出更好的,偶不是大牛,不可能写出好东西,只能先努力做个仿制品,.,还没有能力做复制品,更不用谈超越了

windbg的内核调试部分主要功能封装在dbgeng.dll之中
通过debugcreate创建一个clsid的com+接口来实现调试控制
我们可以拿出ida分析windbg.exe
signed int __stdcall CreateUiInterfaces(int a2, PCWSTR RemoteOptions)
{
............

  ReleaseUiInterfaces();
  if ( a2 )
  {
    v3 = DebugConnectWide(RemoteOptions, &_GUID_27fe5639_8407_4f47_8364_ee118fb08ac8, &g_UiClientBase);

..............
  }
  else
  {
    v6 = DebugCreate(&_GUID_27fe5639_8407_4f47_8364_ee118fb08ac8, &g_UiClientBase);

如同所示,DebugConnectWide连接远程的调试模块

事实上,我们直接利用dbgeng.h+dbgeng.lib,已经可以完成windbg的所有功能了
dbgeng.h文件在C:/Program Files/Debugging Tools for Windows (x86)/sdk/inc
这个文件大小为521kb,包括了一切windbg所用的debugapi
安装windbg的时候一定要选择安装sdk,不然可能没有这个文件

// RemoteOptions specifies connection types and
// their parameters.  Supported strings are:
//    npipe:Server=<Machine>,Pipe=<Pipe name>
//    tcp:Server=<Machine>,Port=<IP port>
STDAPI
DebugConnect(
    __in PCSTR RemoteOptions,
    __in REFIID InterfaceId,
    __out PVOID* Interface
    );

STDAPI
DebugConnectWide(
    __in PCWSTR RemoteOptions,
    __in REFIID InterfaceId,
    __out PVOID* Interface
    );

STDAPI
DebugCreate(
    __in REFIID InterfaceId,
    __out PVOID* Interface
    );

    STDMETHOD(GetThreadContext)(
        THIS_
        __out_bcount(ContextSize) /* align_is(16) */ PVOID Context,
        __in ULONG ContextSize
        ) PURE;
    STDMETHOD(SetThreadContext)(
        THIS_
        __in_bcount(ContextSize) /* align_is(16) */ PVOID Context,
        __in ULONG ContextSize
        ) PURE;

如上api声明,我们可以直接使用这些api完成调试工作

虽然我们可以这样实现自己的debugger,但是还是有一些麻烦
有一个开源的PyDbgEng,
http://sourceforge.net/projects/pydbgeng/

从上面的站点里面可以获取很多资料
我们看看介绍
PyDbgEng is a Python Wrapper For Microsoft Debug Engine.
kernel mode debugging
x86, x64 support
Wrapper for DebugCreate() API which creates IDebugClient COM interface.
Easy access to IDebugClient COM interface
Easy access to all other DbgEng COM interfaces via IDebugClient.QueryInterface()
Easy access to all DbgEng structs and enums.
Receive DbgEng events. Currently supported: IDebugEventCallbacks, IDebugOutputCallbacks

很好.完全封装了IDebugClient COM interface. 从而我们可以直接使用
py的代码有个好处就是可以用最快的速度写出测试程序

我们随便选取一段代码
event_handler = DbgEventHandler()
dbg = PyDbgEng.KernelAttacher(  connection_string = connection_string, /
                                set_initial_bp = True, /
                                event_callbacks_sink = event_handler, /
                                output_callbacks_sink = event_handler, /
                                symbols_path = "SRV*http://msdl.microsoft.com/download/symbols")
---------------------------
class DbgEventHandler(PyDbgEng.IDebugOutputCallbacksSink, PyDbgEng.IDebugEventCallbacksSink):

    def LoadModule(self, dbg, ImageFileHandle, BaseOffset, ModuleSize, ModuleName, ImageName, CheckSum, TimeDateStamp):
        sys.stdout.write("LoadModule: ImageName = /"%s/"/n" % ImageName)
        return PyDbgEng.DbgEng.DEBUG_STATUS_NO_CHANGE
----------------------------
KernelAttacher连接上,设置event,然后就可以直接处理事件了,是不是很方便呢

我们再来看一个r3debuger
event_handler = DbgEventHandler()
dbg = PyDbgEng.ProcessCreator(  command_line = filename, /
                                follow_forks = True, /
                                event_callbacks_sink = event_handler, /
                                output_callbacks_sink = event_handler, /
                                symbols_path = "SRV*http://msdl.microsoft.com/download/symbols")

def NtCreateThread_at_entry(dbg, args):
    sys.stdout.write("NtCreateThread() called with following call stack:/n")
    stack_frames = dbg.get_stack_trace(FRAMES_COUNT)
    for i in range(FRAMES_COUNT):
        eip = stack_frames.InstructionOffset
        if (eip == 0):
            break
        func_symbol = dbg.get_symbol(eip)
        sys.stdout.write("[%d] %s/n" % (i, func_symbol))
    sys.stdout.write("/n")

代码基本是类似的,ProcessCreator选出进程,然后进行各种工作

我们可以发现,利用PyDbgEng +dbgeng.dll能够让我们自己编写debugger
的工作变得异常容易,只需要完成eventhandle的事件处理,,而无需对于复杂的
处理机制进行任何更改就可以实现我们想要的功能了

文中提到的工具
1.windbg
  Install Debugging Tools for Windows 32-bit Version
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
  Install Debugging Tools for Windows 64-bit Versions
http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx

2.PyDbgEng
http://sourceforge.net/projects/pydbgeng/
http://bbs.pediy.com/showthread.php?t=41440
lin斑推荐的工具太强大了
k8s集群部署私有镜像仓库 本文介绍了在Kubernetes集群中部署私有镜像仓库的完整方案。使用registry:2镜像创建Deployment,通过NodePort(30500)暴露服务,并采用hostPath(/data/registry)实现数据持久化。部署过程包括节点标记、YAML配置、资源创建及验证步骤,同时提供了Docker和Containerd两种环境下的详细使用方法,包括配置不信任私有仓库、镜像推送/拉取操作指南。该方案特别适合开发测试环境,为团队提供便捷的本地镜像管理能力。 阅读详情

相关推荐

让数学变得更生动manim库的使用(1)-基本概念

0、概述 数学理论与数学公式的展示总是一件很枯燥的事情,但3b1b的manim动画库在github上开源之后,让这一切变得非常简单。目前这个库已经分成两个版本一个由3b1b自身维护。但作者并没有承诺长期维护该库,所以由专门团队再次基础上研发了相应的社区版,并对该版本进行长期维护。本文的所有案例都基于社区版的官方案例。本文主要介绍该库的基本概念相关的案例,文章主要以代码为主,关键代码都有相关注释。 另外本文的运行环境维jupyter这与其他的ide环境运行代码稍微有些不同 1、类库引入已经相关测试 引

amao1998的博客 9966

windbg 插件编写 ---基础篇

标 题: WinDbg插件编写——基础篇作 者:Lvg时 间:2007-01-29 00:43  链 接:http://bbs.pediy.com/showthread.php?t=38729 WinDbg插件编写——基础篇     本文只是简略的描述了一下WinDbg扩展命令的编写步骤及方法,更详细的请看他的帮助文档,起到一个抛砖引玉的作用就行了。 Win

superliuxing的专栏 1988

Ubuntu 20.04 LTS下5分钟搞定ONLYOFFICE协作空间社区版(Docker版保姆级教程)

本文提供了一份在Ubuntu 20.04 LTS系统上,通过Docker快速部署ONLYOFFICE协作空间社区版的保姆级教程。内容涵盖从系统准备、Docker环境搭建,到执行自动化安装脚本、完成Web初始化的全流程,并详细说明了部署后的安全配置、数据备份及基本运维要点,帮助用户高效构建私有、安全、可控的团队文档协作平台。

weixin_28826961的博客 262

如何完成Windbg插件

WinDbg插件编写――基础篇本文只是简略的描述了一下WinDbg扩展命令的编写步骤及方法,更详细的请看他的帮助文档,起到一个抛砖引玉的作用就行了。WinDbg是老盖自己家出的调试器,功能很强大。即可调试用户态,也可以调试核心态程序。本文主要介绍他插件(准确讲应该是扩展命令)的编写方法。WinDbg的扩展命令和OD一样是通过DLL文件导出的。一.插件的类型他有两种不同类型的DLL文件:1.DbgE

IT杂谈 3253

如何实现MCGS与S7-200SMART PLC以太网多台通信控制?

第九步:(设备工具箱—设备管理—鼠标依次点击通用TCP/IP父设备—西门子_ Smart200到设备窗口里面去)数据类型:第0位(指PLC地址变量小数点后面的位数,例如我地址是M0.0,那么在数据类型应填写通道的第00位)第十步:(鼠标双击打开通用TCPIP父设备0--[通用TCP/IP父设备]进入通信配置)通道地址:0(指小数点前面起始字节的地址,例如我地址是M0.0,那么应在通道地填写0)。第七步:(选择通用TCP/IP父设备,点击新增,右侧选定设备就会自动添加进去。

u010670857的博客 6720

硬件压力测试工具使用方法

B, --bind host# 绑定到主机的多个地址中的一个。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。-c, --client host#如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。-C, --compatibility# 与低版本的Iperf使用时,可以使用兼容模式。-b, --bandwidth #[KM] UDP模式使用的带宽,单位bits/sec。

weixin_53303772的博客 8221

[转帖]WinDbg插件编写——基础篇

导读:   一.插件的类型   他有两种不同类型的DLL文件:   1.DbgEng类型DLL。这种类型的DLL都已“dbgeng.h” 头文件为基础。扩展命令的功能比较强大,可以用Debugger Engine API(这种调试API不依赖WinDbg,可以用来编写自己的调试器),也可以用WdbgExts API。   2.WdbgExts类型DLL。这种类型的DLL以“Wdbgexts

菠菜的专栏 2783

SPI模式下的SD卡读写,为什么你的数据总出错?详解时序与状态机避坑指南

本文深入探讨SPI模式下SD卡读写数据出错的根本原因,提供时序优化与状态机设计的实战指南。针对时钟周期计数、状态机跳转和忙检测等核心问题,详解命令时序细节、状态机同步策略及高级避坑技巧,帮助开发者提升SD卡在SPI模式下的稳定性和性能。

weixin_30514745的博客 263

编写 Debugging Tools for Windows 扩展,第 1 部分 (windbg 插件 扩展)

调试器 API 编写 Debugging Tools for Windows 扩展 Andrew Richards   下载代码示例 http://download.csdn.net/detail/whatday/7133071 对生产问题进行故障排除可能是任何一位工程师要完成的最令人头疼的工作之一。 但同时它也可能是让人最有成就感的工作之一。 我在 Microsoft 技术支持部工作...

whatday的专栏 2860

秋叶ComfyUI-v10中文整合包:全中文AI绘画一键部署与实战指南

Stable Diffusion作为当前主流的扩散模型,通过去噪过程从随机噪声生成高质量图像,其开源特性推动了AI绘画技术的普及。然而,其官方WebUI在自定义工作流和可复现性上存在局限,而基于节点流程的ComfyUI则提供了更高的自由度和工程化控制能力,尤其适合复杂、可重复的创作流程。对于中文用户而言,英文界面和提示词输入是主要障碍。秋叶出品的ComfyUI-v10中文整合包,正是针对这一痛点,提供了**全中文界面**和**原生中文提示词支持**的解决方案。该整合包将Python环境、依赖库及常用插件预配

weixin_33895475的博客 401

使用Simulink对固定翼无人机的自动起飞与降落进行仿真

本文介绍了基于Simulink的固定翼无人机自动起飞与降落控制系统设计方法。系统包含飞行器动力学模型、控制系统、环境模拟等模块,通过简化动力学方程描述无人机运动特性。详细说明了从创建模型、设置动力学方程、设计PID控制器(包括自动起飞和降落控制策略)到添加环境模拟的完整仿真流程。重点阐述了升降舵和发动机推力的控制律设计,以及性能评估要点。本方法可有效验证控制系统设计,优化飞行稳定性和安全性参数,为无人机自主控制提供仿真支持。

amy_mhd的博客 224

Make a Windbg By Yourself(一)

标 题:Make a Windbg By Yourself(一)作 者:zhuwg时 间:2008-06-08 07:05:24  链 接:http://bbs.pediy.com/showthread.php?t=66218 先祝福大家端午节快乐 Windbg 的工作实质是连接windows的内核调试,windows已经把内核调试的机制集成进了内核,只需要连接windows的内核调

superliuxing的专栏 783

零基础做AI漫剧:Kimi K2.5写本 + Flux生图 + Seedance 2.0动效的保姆级教程

很多零基础小伙伴想做AI漫剧,却被“写剧本、画分镜、做动效”三大难题劝退——不会写剧情、不会画插画、不会做动态,觉得门槛太高。其实不用慌!今天就给大家带来保姆级教程,全程用Kimi K2.5(写剧本)、Flux(生分镜图)、Seedance 2.0(做动效)三个工具,不用专业技能,不用手动绘画,零基础也能在1小时内做出1分钟完整AI漫剧,全程步骤拆解、示例齐全,跟着做就能出片!

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 3043

WinDBG扩展命令的工作原理

Windbg扩展命令原理 Depends tool - Scan dependent modules on windows for dll, exe, sys files http://dependencywalker.com/ 要理解WinDBG扩展命令的原理应该先理解WinDBG软件的架构,下图是以模块为单位所画出的架构示意图。最上层是四个EXE模块,它们提供了不同形

笑傲江湖的专栏 893

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

v8windbg:为 V8 引擎打造的 WinDbg 调试扩展(构建、使用与源码架构解析)

[v8windbg](https://link.gitcode.com/i/b348366d1cc2668181992bf0e84702dd) 是 V8 官方仓库中提供的 WinDbg 调试扩展,用于在调试 V8 引擎进程(d8、Chrome、Node.js 等)时,让 WinDbg 的 Locals 窗口与 `dx` 命令能够以可读的方式展示 V8 堆对象(HeapObject、Handle、T

gitblog_00294的博客 378

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【逆向知识】开发WinDBG扩展DLL

如何开发WinDbg扩展DLL WinDbg扩展DLL是一组导出的回调函数,用于实现用户定义的命令。以便从内存转储中提取特定的信息。扩展dll由调试器引擎加载,可以在执行用户模式或内核模式调试时提供自动化任务的扩展功能。扩展DLL可以导出任意数量用于执行扩展命令的函数。每个函数都被显式地声明为DLL定义文件中的导出函数,.def文件和函数名必须是小写字母。 ​ WinDbg(DbgEng...

weixin_30888027的博客 405

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

编写windbg调试器扩展 入门篇2

前面一篇是用sources和nmake组合编译生成调试器扩展,步骤比较繁琐,我相信读者应该更倾向于用IDE来编写代码。本篇有2个主题:1.将前面的代码移植到VS上,用IDE编译;2.调试生成的扩展命令。 1.移植代码到IDE     这部分相对简单,所以放在开头。要用IDE代替nmake编译调试器扩展,只要把sources文件中的编译/链接选项复制到VS对应的选项中就可以了。 1.1.设置编

lixiangminghate的专栏 926

编写windbg调试器扩展 入门篇1

我博客的左侧专栏曾经转过windows下编写调试器的一系列文章,这类文章是从零打造调试器,而这篇文章是介绍如何为windbg编写调试器扩展命令。 0.前言     windbg的命令有很多,其中以"!"开始的命令就是所谓的扩展命令。这些扩展命令由Dll以导出函数的形式提供给windbg加载。一般跟在"!"后面的字符串就是dll中导出的函数。以!htrace命令为例,查看windbg帮助文档,它

lixiangminghate的专栏 1906

Debugger APIs - Writing a Debugging Tools for Windows Extension (编写Windbg扩展)

转自:https://msdn.microsoft.com/en-us/magazine/gg650659.aspx Troubleshooting production issues can be one of the most frustrating jobs that any engineer can do. It can also be one of the most rewar

lixiangminghate的专栏 1674

pykd执行出错??windbg和pykd正确安装过程

windbg和pykd安装过程windbgpykd windbg 从微软官网下载windows sdk setup安装,选择框只选择Debugging …,只安装windbg,不要从win7上的windbg打包放在windows 10上用,虽然平时可以用,没有问题,但是以后用pykd时可能会出问题,安装windbg最靠谱的方法是从官网下载winsdksetu.exe安装!!! pykd 从pykd...

dapeng1994的博客 1596

谷歌浏览器调试api插件_Windows调试器API —版本化结构的结尾

谷歌浏览器调试api插件Some time ago I was introduced to the Windows debugger API and found it incredibly useful for projects that focus on forensics or analysis of data on a machine. This API allows us to open ...

weixin_26746861的博客 696

循环嵌套(多层 for 循环)

表:order(订单表,order_id, user_id)、user(用户表,user_id, user_name)✅ 优化:先查所有订单,拿到所有 user_id 批量 in 查询,内存 join。✅ 优化:先把优惠券转 HashMap,单层循环查找(hash 查找 O (1))SQL 只有 2 次,O (1) 数据库查询,内存遍历 O (n)。需求:查询所有订单列表,同时带出每个订单对应的用户名称。需求:订单列表、优惠券列表,把订单匹配对应的优惠券名称。复杂度:O (M+N),非常快。

weixin_43732943的博客 215

Python+Agent入门笔记(六):记忆和状态,从“一次性问答”到“能用助手”

滑动窗口的缺点很明显:被扔掉的信息就真没了。如果用户第一轮说“我不吃辣”,隔了二十轮让他推荐餐厅,模型已经忘了。定期把旧的对话压缩成一段总结,作为一条特殊的消息插进去。"""把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。"""# 把旧消息拼成纯文本,让模型总结content = f"[工具结果]把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。

qq_41241612的博客 108

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

a bit 215

本地chatbot4--引入LangGraph

上一节实现了chatbot的连续调用工具的功能,但目前流程还是提示词→模型→解析→调用工具(可选)→输出线性的一条路走到底(LangChain)只适合简单线性任务(问答、摘要、简单RAG)agent的本质是:“模型决定调工具→执行→结果喂回模型→再决定……直到完成”。举例:读日志 → 解析 ─失败→ 重试(≤3次) ─→ 退出│成功↓算统计 → 对比历史 → 生成报告 → [人工审核卡点] → 发送。

weixin_45859446的博客 103
上一篇: Ring0 inline hook For Delphi.
下一篇: 俩种方式注入机器码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值