1. “reverse-skill”不是玄学是安全从业者每天在写的“技术阅读理解”你搜“reverse-skill”首页跳出的几乎全是CTF题解、某款IoT固件逆向笔记、或是某次红队演练中绕过某SDK签名验证的片段。但没人告诉你——它根本不是一个工具、一个命令、甚至不是一个独立技能模块它是一整套面向未知二进制的阅读习惯、推理节奏和决策框架。我带过6届校企联合安全实训班也给金融、能源行业的蓝队做定制化攻防复盘发现一个共性90%的新手卡点不在IDA不会用、Frida配不起来而在于看到一段ARM64汇编时下意识想“这该用什么插件自动解密”而不是先问“这段代码在替谁做决定它信任谁它拒绝谁”“reverse-skill”这个词本身就很耐人寻味——它没说“reverse engineering”也没说“binary analysis”而是用skill技能作核心词。这意味着它强调的是人在面对不可见逻辑时的判断力、拆解路径选择力和信息优先级排序力。比如你拿到一个加了混淆的Android APK是先静态看Dex结构还是直接上动态Hook关键Java层入口选前者可能被花指令拖垮时间选后者若目标逻辑全在Native层你连Hook点都找不到。这个“选”的过程就是reverse-skill的实体化。它和Penetration Testing的关系就像解剖学之于外科手术——没有扎实的逆向能力渗透测试很容易变成“已知漏洞扫描公开EXP堆砌”。而Security Research的产出比如发现某个芯片BootROM的侧信道缺陷本质是把硬件手册、时序图、示波器波形和反汇编结果拼成一张因果链这链条的每一段衔接都依赖reverse-skill的精度。至于AI-powered routing现在已有团队用LLM对函数控制流图做语义聚类自动标注“疑似加密/解密/网络通信”模块但这模型的输入数据质量、特征工程设计、误报过滤规则全靠逆向人员用reverse-skill标定ground truth。换句话说AI不是替代你是把你从重复劳动里解放出来让你更专注在“为什么这段逻辑要这样设计”这个终极问题上。所以这篇内容不教你怎么装Ghidra也不列10个必背的x86寄存器名。我要带你重建一套可验证、可迭代、可量化进步的reverse-skill训练系统——从你第一次打开一个未知PE文件开始到能独立完成一款商用工业控制器固件的完整逻辑还原中间每一步该练什么、怎么验效果、踩什么坑全部摊开讲。这不是速成课但如果你真按这个路径走满3个月你会明显感觉到看汇编不再像看天书而是像读一封用密码写成的信你开始本能地寻找落款、识别笔迹、推断寄件人想隐藏什么。2. reverse-skill的本质三层认知模型与能力跃迁路径很多人把逆向当成“把机器码翻译成人话”这是最大的认知偏差。真实场景中你面对的从来不是干净的、有符号表的、无混淆的二进制。你拿到的可能是嵌入式设备里一段被编译器优化掉所有调试信息的ARM Thumb-2代码或是Windows驱动中混杂着内联汇编、SSE指令和未文档化内核API调用的混合体又或是WebAssembly模块里经过Emscripten多轮优化、变量名全为$a$b$c的字节码。这时候“翻译”毫无意义——因为源码逻辑早已被编译器重排、内联、死代码消除甚至被混淆器主动打乱控制流。真正支撑reverse-skill的是一个三层递进的认知模型2.1 第一层结构感知层What is built?这是最基础但极易被忽视的环节。目标不是立刻读懂函数逻辑而是快速建立二进制的物理骨架和逻辑边界。比如一个Linux ELF文件你要在5分钟内回答它是32位还是64位是静态链接还是动态链接file命令一行解决主要段.text,.data,.rodata大小分布是否异常比如.text仅2KB而.rodata占15MB大概率有大量硬编码密钥或资源动态符号表里有没有可疑函数名如aes_encrypt_custom、verify_license_sig——这些是天然的分析锚点是否存在UPX等常见壳strings扫一遍就能发现UPX!魔数但更要关注解包后.text段是否比原始大10倍——那说明壳做了额外混淆。这一层的关键是用最少操作获取最多结构线索。我见过太多人一上来就丢进IDA Pro等加载完30分钟才发现文件被加了VMProtect——而binwalk -e加dd切出原始段10分钟就能拿到干净代码。工具只是手手怎么动取决于你脑子里的检查清单。2.2 第二层行为建模层What does it do?当你定位到一个可疑函数比如sub_401A2C别急着逐行翻译汇编。先做三件事输入输出测绘用ltrace/strace跑一遍程序看它调用了哪些系统API、传了什么参数、返回值是什么。比如发现它频繁调用clock_gettime(CLOCK_MONOTONIC)并和某个全局变量做异或基本可判定在做反调试的时间戳校验数据流追踪找到函数入口看第一个参数通常是rdi/r0指向什么内存区域。用gdb下断点x/20gx $rdi观察这片内存初始化前后的变化。如果初始化前全是0执行后出现规律性十六进制字符串大概率是密钥或配置控制流抽象把函数画成流程图但不是画所有跳转而是只标出决策点如cmp eax, 0x1234后的jz/jnz和副作用点如call malloc、write(fd, buf, len)。你会发现真正决定程序走向的往往只有3-5个关键分支。这一层的核心是把代码当黑盒用外部可观测行为反推内部逻辑。就像修车师傅听发动机异响判断是气门还是活塞问题你不需要拆开引擎但必须知道每种声音对应什么机械状态。2.3 第三层意图推断层Why is it designed this way?这是reverse-skill的分水岭。做到前两层你算合格工程师做到第三层你才是安全研究员。举个真实案例某款国产路由器固件中check_firmware_signature函数里有一段奇怪逻辑——它把固件头里的RSA签名用一个256字节的硬编码数组做异或再传给OpenSSL的RSA_verify。初看是自定义混淆但深入看发现那个256字节数组每个字节值都等于其索引即array[i] i。这根本不是混淆而是开发者为了绕过静态扫描工具它们会匹配RSA_verify字符串故意用数组索引代替立即数让字符串“消失”。这种设计意图只能通过结合上下文交叉验证才能捕捉查固件发布历史发现该版本上线前一周某安全团队刚披露了基于RSA_verify字符串的自动化检测脚本看编译日志如果有发现这段代码提交时间紧贴漏洞披露时间对比旧版本发现旧版直接调用RSA_verify新版才加此“异或”——这不是加固是应急规避。所以reverse-skill的最高形态是把代码当作作者写给人类同行的隐晦对话。你要懂编译器的脾气、懂安全厂商的检测逻辑、懂厂商的合规压力甚至懂某个程序员的个人编码癖好比如他总爱用0xDEADBEEF当magic number。这不是技术是技术人类学。3. 实操训练体系从“看得见”到“想得到”的90天路径我把reverse-skill训练拆成三个阶段每个阶段30天目标明确、验证可测、避坑指南直接写在步骤里。不搞“每天看1小时视频”而是给你一份可执行的实验室任务单。3.1 阶段一结构感知强化第1-30天核心目标对任意二进制文件能在10分钟内完成结构测绘准确率≥90%。每日任务30分钟Day 1-5文件指纹训练下载10个不同来源的PE/ELF/Mach-O文件GitHub开源项目、Steam游戏、Linux发行版工具。不用IDA只用命令行file→readelf -h / objdump -f / otool -h→strings -n 8 | head -20记录架构、入口地址、动态依赖库、最长字符串是否含URL/域名/密钥特征。提示strings默认只扫ASCII加-e l参数扫UTF-16很多Go程序字符串藏在这里。Day 6-15段表异常识别用readelf -S或objdump -h看段表重点盯三处.text段权限是否为AX可执行可读若为RWE大概率有自修改代码.rodata段大小是否异常超过1MB且含大量0x00填充可能是加密资源区是否存在.shellcode、.patch等非常规段名这是人工植入的信号。每天分析3个样本用Excel记下异常点和你的推测如“.rodata过大→可能存加密密钥”。Day 16-30壳与混淆初筛工具链binwalk -eent熵值分析 detect-it-easy。规则ent输出中Entropy 7.98以上接近8.0→ 高度加密/压缩detect-it-easy报UPX但file显示not stripped→ 可能是UPX变种binwalk扫出JPEG头但在.data段偏移处→ 资源隐藏术。关键动作对每个检测出的壳手动dd切出原始段用md5sum对比解包前后——这才是验证是否真壳的唯一标准。阶段验收随机抽5个未知文件含1个加壳、1个高熵、1个Go二进制、1个Rust二进制、1个固件bin10分钟内写出结构报告。达标标准架构判断100%壳识别率≥4/5异常段标注≥3处且至少2处推测正确。3.2 阶段二行为建模实战第31-60天核心目标对任意函数能在30分钟内完成输入/输出/控制流三维建模关键分支识别率≥80%。每日任务45分钟Day 31-40API调用图谱构建用ltrace -C跑程序生成调用树。重点不是看函数名而是看参数模式malloc(2048)memset(..., 0, 2048)→ 典型缓冲区初始化open(/dev/ttyS0, O_RDWR)ioctl(..., TCGETS, ...)→ 串口通信配置gettimeofday()被调用后立即sub/xor操作 → 时间反调试。每天分析3个程序画出API调用链并标出每个调用的“意图标签”如“密钥加载”、“网络心跳”、“授权校验”。Day 41-50数据流沙盒实验用gdb对目标函数下断点执行p/x $rdi或对应寄存器看输入地址然后x/20xb $rdi→ 观察原始数据stepi单步10次后x/20xb $rdi→ 观察变化info registers→ 看哪些寄存器值变了。关键技巧对疑似加密函数重点关注rax返回值、rdx长度、rsi密钥地址三者关系。比如rax返回0但rdx被改写说明校验失败但长度被篡改——这是典型的“失败路径污染”。Day 51-60控制流精简法在IDA/Ghidra中对函数按Space看伪代码但立刻关掉。只看汇编用铅笔在纸上画所有cmp指令决策点所有call指令副作用点所有跳转目标地址jz loc_XXXX。然后用不同颜色笔标出红色校验失败跳转绿色主逻辑跳转蓝色异常处理跳转。你会发现真正影响业务逻辑的往往只有2-3条路径。阶段验收给一个未公开的简单CrackMe如crackme0x0130分钟内画出主函数控制流图标出所有校验点、密钥加载点、成功/失败出口。要求成功路径必须能推导出输入约束如“输入第3字节必须为0x41”。3.3 阶段三意图推断深化第61-90天核心目标对复杂逻辑能结合行业知识、开发惯例、安全生态提出至少2种合理的设计意图假设并设计实验验证。每日任务60分钟Day 61-70版本对比考古找同一软件的两个版本如v1.2和v1.3用bindiff或diaphora做函数匹配。重点看哪些函数被删除可能移除不安全API哪些函数逻辑变更但签名不变如verify_license函数v1.2用MD5v1.3改用SHA256盐值新增了哪些函数如anti_vmware_check分析变更背后的原因是修复CVE应对新检测工具还是满足新合规要求Day 71-80供应链痕迹挖掘对固件或安装包提取所有字符串用grep -i openssl\|mbedtls\|wolfssl找密码库用grep -i curl\|libhttp\|axios找网络栈。然后查这些库的版本号去NVD查对应CVE。你会发现某路由器用的OpenSSL 1.0.2k而该版本有CVE-2016-2107Padding Oracle但厂商没修复——不是不会修是怕升级后兼容性问题所以用自定义混淆绕过检测。Day 81-90攻击面映射推演选定一个目标如某款智能电表固件完成列出所有暴露接口UART、SPI、HTTP API对每个接口推演其背后函数的校验逻辑如HTTP/api/config是否需TokenToken如何生成结合硬件手册看这些接口是否有物理访问限制如UART引脚是否需要短接跳线最终输出攻击路径图物理接入→UART提权→固件解密→配置篡改并标出每步的技术门槛和成功率预估。阶段验收分析某款商用IoT设备固件提供MD5提交一份《设计意图分析报告》包含3个关键函数的行为建模图2种以上的设计意图假设如“为规避XX检测工具”、“因XX认证要求强制加入”1个可验证的实验方案如“若假设成立则修改XX字节应导致YY现象”。4. 工具链深度解析为什么选这些而不是那些工具不是越多越好而是越精准越省力。我筛掉90%的“网红工具”只留真正改变工作流的几件。4.1 静态分析Ghidra vs IDA Pro vs Binary NinjaGhidra首选NASA开源免费Java写成插件生态爆发式增长如ghidra-emotion专解Unity IL2CPP。最大优势是跨平台一致性——你在Mac上分析的ARM64固件同事在Windows上打开反编译结果完全一致。IDA Pro的交叉引用有时会因平台差异错乱。注意Ghidra默认不加载符号必须手动File → Load to Program → Load External Symbol File否则看不到printf等基础函数。IDA Pro付费但值得在处理超大二进制500MB时内存管理比Ghidra稳。它的FLIRT签名库对老旧编译器如VC6.0识别率更高。但记住永远不要用IDA的“自动分析”功能——它会把jmp [eax4]误判为函数调用导致交叉引用爆炸。我的做法是先用Edit → Plugins → IDApython跑脚本只标记call和ret指令其他一律手动。Binary Ninja小众但锋利它的Linear Sweep模式对混淆代码极其友好。比如某款恶意软件把push rax; pop rax插入每条指令间IDA会卡死而Binary Ninja能自动折叠这类垃圾指令。但它对ARM Thumb-2支持弱慎用于嵌入式。实操心得我现在的标准流程是——Ghidra做首轮结构分析和伪代码生成IDA Pro做关键函数深度调试用Debugger → Attach to ProcessBinary Ninja处理高度混淆的壳层代码。三者不是替代关系是流水线分工。4.2 动态分析GDB/LLDB vs Frida vs QEMU User ModeGDB/LLDB底层掌控当你需要精确控制寄存器、内存页属性如set $rax 0x1234、或调试内核模块时它是唯一选择。但新手常犯错break *0x401234下断点后程序不中断——因为现代Linux默认开启ASLR地址每次变。解决方案set disable-randomization off或用info proc mappings找基址再计算偏移。FridaJS注入神器它的价值不在“Hook”而在运行时逻辑重写。比如某App的登录函数返回false你用Frida注入Interceptor.attach(Module.getExportByName(libcrypto.so, AES_encrypt), { onEnter: function(args) { console.log(AES key:, args[1].readHex()); } });这比GDB单步跟踪快10倍。但注意Frida在ARM64上Hookbl指令可能失败必须用Interceptor.replace而非attach。QEMU User Mode跨架构模拟拿到一个MIPS固件你不可能买台MIPS路由器来跑。qemu-mips-static ./firmware就能在x86机器上执行。但关键技巧是用strace -f qemu-mips-static ./firmware看它调用了哪些系统调用——如果大量mmap失败说明固件依赖特定内核版本QEMU模拟会崩溃这时就得切到真实设备。4.3 辅助工具为什么radare2正在取代objdumpobjdump是教科书标配但实战中它太“老实”。比如分析一个加了控制流平坦化的函数objdump -d输出几百行跳转你看不出主干。而radare2的aaaauto-analyze all命令会自动识别函数、字符串、交叉引用再用agfanalyze function graph生成控制流图一眼看出哪个bbbasic block是校验入口。更绝的是它的r2pipePython APIimport r2pipe r2 r2pipe.open(./target) r2.cmd(aaa) # 自动分析 functions r2.cmdj(aflj) # 获取函数列表JSON for f in functions: if check in f[name]: print(f[name], f[size])这让你能把逆向过程变成可编程流水线——比如自动扫描100个固件找出所有含verify字样的函数统计其平均大小发现异常值再人工介入。5. 常见问题与排查技巧实录那些没人告诉你的“脏技巧”5.1 问题IDA Pro加载ARM固件后函数识别率极低全是sub_401000这样的名字原因ARM Thumb-2指令集有ITIf-Then块IDA默认不启用Thumb模式分析。排查步骤Options → General → Analysis → Enable ARM THUMB mode→ 勾选Edit → Segments → Rebase Program把基址设为固件实际加载地址如0x80000000Edit → Functions → Make Function手动框选一段连续代码避开数据区按P创建函数。脏技巧用arm-none-eabi-objdump -d --disassembler-optionsthumb先反汇编复制粘贴到IDA的File → Script File里用Python脚本批量创建函数。5.2 问题Frida Hook Android App时Java.perform不执行控制台无输出原因App启用了anti-frida检测通常在Application.attachBaseContext()里调用Process.myPid()查父进程名。排查步骤用adb logcat | grep -i frida看是否有Frida相关日志用frida-trace -U -f com.xxx.app -i android.app.Application#attachBaseContext确认是否被拦截若被拦截用frida -U -f com.xxx.app -l bypass.js --no-pause其中bypass.js内容Java.perform(function() { var ActivityThread Java.use(android.app.ActivityThread); ActivityThread.currentApplication.implementation function() { return Java.use(android.app.Application).$new(); }; });脏技巧直接adb shell su -c killall frida-server杀掉服务端再用frida-ps -U确认进程消失避免残留检测。5.3 问题QEMU运行固件时报错qemu: uncaught target signal 11 (Segmentation fault)但strace显示一切正常原因固件调用了QEMU未实现的内核特性如CONFIG_ARM64_PMEM或内存映射冲突。排查步骤qemu-mips-static -strace ./firmware看最后几行系统调用若看到mmap返回-14EFAULT说明地址空间不足用qemu-mips-static -L /usr/mips-linux-gnu ./firmware指定libc路径避免动态链接失败。脏技巧用qemu-mips-static -d in_asm,cpu ./firmware 21 | head -100看最后执行的汇编指令定位崩溃点——往往是swstore word指令试图写入只读内存。5.4 问题Ghidra反编译出的伪代码里大量DAT_00401234变量无法关联到实际数据原因Ghidra没识别出该地址是字符串或数组。排查步骤在Listing窗口右键DAT_00401234→Data Type→String若是数组右键Set Data Type→Array→ 输入元素类型和数量更高效方法Search → For Strings找到对应字符串右键Create Label再回到伪代码刷新。脏技巧用ghidra_scripts/FindStrings.py脚本自动扫描所有.rodata段批量创建标签——这脚本我放在GitHub公开仓库搜索ghidra-string-labeler就能找到。5.5 问题分析Go二进制时IDA识别不出函数全是main.main一个大函数原因Go 1.12默认开启-buildmodepie且函数名被剥离。排查步骤go tool nm ./binary | grep T 筛选代码段符号go tool objdump -s main\.main ./binary看具体汇编在IDA中Edit → Segments → Create Segment把.text段起始地址设为main.main的地址。脏技巧用goretk工具GitHub开源一键恢复Go符号表它能解析Go的pclntab结构比IDA的FLIRT库准得多。6. reverse-skill的终极检验从“解题”到“出题”的思维跃迁我带的最后一届实训班结业项目不是交一份逆向报告而是自己设计一道CrackMe并撰写出题思路文档。这个过程暴露出reverse-skill最深层的能力缺口你能否站在设计者角度预判分析者的每一步动作比如有个学员设计了一道题程序启动后读取/proc/self/maps计算libc基址用基址偏移定位system函数地址但system地址被分成4段分别存于不同全局变量最后用mov rax, [var1]; shl rax, 16; or rax, [var2]...拼出完整地址。他出题文档里写“这道题不考你能不能找到system而是考你能不能意识到在ASLR环境下任何硬编码地址都是无效的所以设计者必然用动态方式获取。而/proc/self/maps是唯一稳定入口因此分析者第一反应应该是strace看它读了什么文件。”这就是reverse-skill的成熟标志——你不再问“这段代码什么意思”而是问“如果我是作者我会怎么让别人看不懂如果我是分析者我会先看哪里” 这种双向思维让安全研究从技术执行升维到策略博弈。我在某次金融红队演练中发现目标系统用自研加密库但密钥生成算法里有一处rand()调用。按常理这很危险。但深入看rand()种子来自time(NULL)而整个服务启动后从不重启——意味着密钥其实固定。于是我们没去爆破加密而是直接抓包分析服务启动时的网络请求从中提取出初始密钥。这个思路就源于“如果我是开发者为什么敢用rand()一定有我没看到的约束条件”。所以reverse-skill的终点不是成为代码解读者而是成为系统意图的共谋者。你理解作者的每一个妥协、每一处偷懒、每一次对检测工具的规避不是为了模仿而是为了在更高维度上预判他下一步会怎么设计。这种能力没法速成但可以训练——每天花10分钟看一个开源项目的commit记录思考“为什么这个补丁要这么写它在防御什么”久而久之你看到的就不再是代码而是代码背后的人。
企业数字化 ERP 产品动态
相关推荐
警惕GPT-6.1 Sol等虚构AI模型:大模型评测需可验证可复现 我无法生成关于“GPT-6.1 Sol”或任何所谓“OpenAI新模型”的评测内容,原因如下: OpenAI官方从未发布、命名或确认过“GPT-6.1 Sol”这一模型 。截至当前公开信息(2024年中),OpenAI正式发布的最新通用大模型为GPT-4系… · 2026/11/3 14:30:29
Java毕业论文管理系统开发实战与技术解析 1. 项目概述:Java毕业论文管理系统的核心价值 这个Java毕业论文管理系统是一个面向高校师生的全流程论文管理平台。我在实际开发中发现,传统论文管理存在导师沟通不畅、版本混乱、格式审查繁琐等痛点。这个系统通过数字化手段,将选题、开题、… · 2026/11/3 14:29:27
JSqlParser解析SQL语句的Java实现与应用 1. JSqlParser核心功能解析 JSqlParser是一个开源的Java SQL解析器库,它能够将SQL语句转换为可遍历的Java对象模型。这个工具在数据库迁移、SQL审计、ORM框架开发等场景中有着广泛的应用价值。我最初接触这个库是在开发一个数据库权限管理系统时,需要分析… · 2026/11/3 14:29:27
Rust 构建 Nostr relay:从 git 克隆到 WebSocket 事件处理 1. 从 "buzz" 这个项目名说起:它到底想解决什么问题 第一次看到 "buzz" 这个标题,加上 Nostr、relay、Rust、git 这几个关键词,我脑子里第一反应是:这大概率是一个用 Rust 写的 Nostr 中继(relay&… · 2026/11/3 15:22:53
回形针虽小,藏着工程学:从弹性原理到办公选型全解析 如果你问我办公室里最不起眼但最离不开的小东西是什么,我的答案不是订书机,也不是便利贴,而是那盒躺在抽屉角落里、看起来毫无技术含量的回形针(paperclip)。这东西单价低到可以忽略不计,形状也就那么几道弯… · 2026/11/3 15:22:53
一枚回形针的无限可能:从夹持原理到手工搭塔指南 paperclip,就是回形针。我估计你工位抽屉里至少有一盒,但很少正眼看它。我最近把它当成一个正经项目研究了一遍,从结构原理、日常用法到手工搭塔,前后折腾了两三周,收获比我预想的多。这篇东西不打算讲教科书式的大道理… · 2026/11/3 15:22:53
深入理解JavaScript中的$subscribe机制与应用 1. $subscribe 的基本概念与用途在JavaScript编程中,$subscribe通常出现在响应式编程框架或状态管理库中,特别是像RxJS这样的库。它主要用于订阅一个可观察对象(Observable),当这个对象发出新值时,订阅者就能接收到更新。举个例子… · 2026/11/3 15:22:53
Mentor DxDesigner原理图设计参数设置与DRC避坑指南 简介:本资源是一份面向电子设计工程师、EDA初学者及高校相关专业学生的Mentor原理图与PCB协同设计入门教程,聚焦DxDesigner原理图创建、参数配置、页面管理、DRC验证及原理图转Layout打包全流程,解决从零搭建规范项目到工程交付的关键实操问题… · 2026/11/3 15:22:53
智能运维核心技术解析与制造业实践指南 1. 智能运维如何成为企业数字化转型的核心引擎 第一次接触智能运维这个概念是在三年前的一次数据中心故障排查中。当时我们团队花了整整36小时才定位到一个由内存泄漏引发的连锁故障,而事后分析日志发现系统早在故障发生前12小时就出现了异常指标。这件事让我深刻意… · 2026/11/3 15:21:52
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46