易语言EIP永久注入实战:原理、实现与避坑指南
1. 从“EIP永久注入”这个标题说起它到底在解决什么问题第一次看到“易语言EIP永久注入”这个标题很多人会一头雾水。EIP是x86架构CPU里的指令指针寄存器它指向下一条要执行的指令地址而“注入”在编程语境里通常指把一段外部代码或数据放进目标进程的内存空间并让它被执行。把这两个词和“易语言”放在一起意思就很明确了用易语言这门以中文语法为特色的编程语言去实现一种对目标进程指令流的持久化改写让某段自定义逻辑在目标程序运行期间长期生效而不是执行一次就失效。这个需求在实际开发里并不罕见。比如你在做游戏辅助工具、软件行为监控、自动化测试桩、老系统的兼容性补丁或者单纯想研究程序运行时行为都可能遇到“我想让目标进程在某个位置稳定地执行我的代码”这种诉求。所谓“永久”并不是说重启电脑还在而是指在目标进程的整个生命周期内持续有效不会因为一次函数调用结束、一次线程切换或者一次内存回收就失效。这跟那种“改一次寄存器、跑完就还原”的临时注入有本质区别。易语言在这里扮演的角色是“实现工具”。它的优势在于中文关键字、可视化界面设计、上手门槛低很多非科班出身的开发者也能快速写出可用的Windows程序。但它的短板也很明显底层操作能力弱、对指针和内存的直接控制不如C/C顺手、编译产物容易被误报。所以用易语言做EIP级别的注入核心难点不在于“易语言能不能做”而在于“怎么绕过它的抽象层把该控制的寄存器、该写的内存、该挂的钩子都精确控制住”。这篇文章适合三类人看一是已经会用易语言写普通应用想往底层再走一步的开发者二是做逆向分析、安全研究、自动化测试需要一种轻量级注入方案的从业者三是对Windows进程内存模型、x86指令执行流程感兴趣想通过一个具体案例把理论串起来的学习者。我会把原理拆开讲把易语言里那些“看起来能跑但实际有坑”的写法点出来也会给出可复现的步骤和参数计算过程。需要提前说明的是本文讨论的技术仅用于合法的软件调试、自有程序测试和安全研究场景任何未经授权对他人程序进行注入的行为都不在讨论范围内。2. EIP注入的底层逻辑为什么“永久”比“临时”难得多2.1 临时改EIP和永久改EIP的本质区别要理解“永久注入”先得理解“临时改EIP”是怎么做的。最简单的方式是使用调试器附加到目标进程在某个地址下断点断点触发时把EIP改成你想要的地址等你的代码跑完再改回来。这个过程依赖调试器这个“外部控制者”持续存在一旦调试器断开目标进程就恢复原样。另一种临时方式是写一个远程线程让目标进程自己调用LoadLibrary加载你的DLLDLL里的代码执行完就结束对主流程的影响是一次性的。永久注入要解决的核心问题是如何让目标进程在没有外部控制者、没有额外线程持续干预的情况下仍然在每次执行到某个位置时都走你的代码。这本质上是一个“钩子Hook”问题。常见的钩子方案有几种Inline Hook直接改写目标函数开头的指令跳转到你的代码IAT Hook修改导入地址表让目标程序调用某个API时实际调用你的函数EIP Hook则更底层它不依赖函数边界而是在任意指令地址上做文章把执行流劫持到你的代码处理完再跳回去。EIP永久注入通常属于Inline Hook的变体但它的特殊之处在于“注入点”不一定在函数开头。有时候目标函数开头有热补丁空间好改有时候你想拦截的是函数中间某条关键指令那里没有多余空间放跳转指令就得用更精细的手法比如利用指令长度对齐、把被覆盖的指令搬到“跳板”里执行、或者用硬件断点寄存器做无痕劫持。易语言要实现这些必须能直接读写目标进程内存、修改内存保护属性、操作线程上下文这些都得靠Windows API来完成。2.2 为什么易语言做这件事容易“看起来成功实际崩溃”易语言的内存操作函数和指针类型系统跟C/C差异很大。它的“字节集”在底层是一块连续内存但你在易语言里拿到的“变量地址”往往不是你以为的那个地址。比如你定义一个整数变量取它的地址这个地址可能指向易语言运行时的一个临时副本而不是原始数据。当你把这个地址写到目标进程里目标进程读到的就是垃圾数据轻则注入无效重则目标进程访问违例直接崩溃。另一个常见坑是调用约定。Windows API大多是stdcall易语言声明API时如果调用约定写错参数压栈顺序和栈平衡就会出问题。在注入场景里你的代码是被目标进程“调用”的目标进程可不知道易语言的调用约定它只会按照自己原本的指令流继续执行。所以你的跳板代码必须严格保存和恢复寄存器现场尤其是EFLAGS、通用寄存器和栈指针。易语言里没有内联汇编要写这种现场保护代码通常得用机器码字节集的方式硬编码或者借助第三方支持库。还有一个隐蔽的问题是线程安全。目标进程可能有多个线程同时执行到你的注入点如果你的跳板代码里用了全局变量、没有加锁、或者修改了共享状态就会产生竞态。易语言的全局变量在多线程下默认不是线程安全的这一点在注入场景里会被放大。我见过不少案例单线程测试一切正常一上多线程就随机崩溃排查半天才发现是跳板里的计数器没有做原子操作。2.3 永久注入的三种可行路径对比在易语言环境下实现EIP永久注入大致有三条路可走各有适用场景和代价。方案核心思路优点缺点适用场景远程线程Inline Hook先注入DLL再由DLL在目标函数开头写跳转实现相对标准资料多需要DLL文件易被检测自有程序测试、兼容性补丁纯内存写跳转直接通过WriteProcessMemory改写目标指令无需额外DLL隐蔽性好跳板代码要自己构造易语言实现难度高轻量级研究、单点拦截硬件断点VEH利用调试寄存器触发异常在异常处理里改EIP不改目标代码无痕调试寄存器数量有限易语言处理异常复杂高隐蔽性研究场景对于大多数用易语言做这件事的人来说第一条路最现实先用易语言写一个DLLDLL里实现Hook逻辑再用易语言写注入器把DLL送进目标进程。这样易语言只需要负责“注入”这个动作复杂的Hook逻辑可以在DLL里用更底层的方式实现。但如果你坚持纯易语言不写DLL那就得走第二条路把跳转指令和跳板代码都作为字节集直接写进目标内存。这条路我实际走过下面会把关键细节讲清楚。3. 动手前的环境准备易语言里那些必须提前配好的东西3.1 支持库与API声明清单易语言本身不带底层内存操作的支持库你需要手动声明一批Windows API。以下是我在实际项目中验证过的最小集合缺一不可。OpenProcess获取目标进程句柄权限至少要包含PROCESS_VM_OPERATION、PROCESS_VM_READ、PROCESS_VM_WRITE、PROCESS_QUERY_INFORMATION。VirtualProtectEx修改目标进程内存页的保护属性把只读或可执行页改成可读写可执行否则WriteProcessMemory会失败。WriteProcessMemory把跳转指令和跳板代码写进目标进程。ReadProcessMemory读取目标地址原始指令用于备份和计算。VirtualAllocEx在目标进程里申请一块内存放跳板代码如果跳板不放在原地址附近的话。CreateRemoteThread如果走DLL注入路线用它来加载DLL。GetModuleHandle、GetProcAddress获取API地址用于计算跳转目标。在易语言里声明这些API时参数类型要特别注意。比如WriteProcessMemory的第三个参数是“欲写入数据的指针”在易语言里应该声明为整数型然后传入你的字节集数据地址。很多人在这里直接传字节集变量结果写进去的是易语言内部结构而不是真实数据。正确做法是用“取变量地址”或者先把字节集转换到一块手动分配的内存里。3.2 目标进程的选择与权限问题测试阶段强烈建议用你自己写的、有源码的简单程序作为目标比如一个每秒打印一次计数器的控制台程序。这样你能精确知道目标地址、能对照源码验证注入效果、崩溃了也能快速定位。不要一上来就拿系统进程或者商业软件练手一方面权限不够另一方面出了问题你无法判断是注入逻辑错了还是目标程序有保护。权限方面如果你的易语言程序和目标程序都是普通用户权限OpenProcess通常能成功。但如果目标程序以管理员权限运行你的注入器也必须以管理员权限启动否则OpenProcess会返回NULLGetLastError给出5拒绝访问。这个坑很基础但很常见尤其是用易语言编译出来的程序默认没有请求管理员权限需要手动在项目属性里勾选“以管理员权限运行”或者用清单文件声明。3.3 地址空间布局随机化ASLR带来的麻烦现代Windows默认开启ASLR每次程序启动时模块基址和栈地址都会变化。这意味着你不能把跳转目标写死成一个固定地址。解决办法有两个一是注入时先通过ReadProcessMemory或查询模块信息获取目标模块的实际基址再根据偏移计算真实地址二是在跳板代码里使用相对跳转让CPU自己算目标地址。易语言里做相对跳转比较麻烦因为你要手动计算机器码的偏移量但这是最稳妥的方式。我一般会先枚举目标进程的模块拿到主模块基址然后根据调试时记录的“函数偏移”算出运行时地址。这个偏移在同一个编译版本里是固定的换版本就要重新找。如果你做的是通用工具还得考虑特征码扫描来定位注入点那就更复杂了本文不展开。4. 纯易语言实现EIP永久注入的完整步骤4.1 第一步定位注入点并备份原始指令假设你已经通过调试器或者静态分析找到了一个合适的注入地址比如目标程序某个循环里的关键指令地址为0x00401500该处原本是一条5字节的指令比如mov eax, [ebx0x10]。你要做的是把这条指令替换成一条跳转指令跳到你的跳板代码跳板执行完再执行被覆盖的原始指令然后跳回0x00401505继续。在易语言里先用ReadProcessMemory读取0x00401500开始的至少16字节保存到字节集变量里。这16字节既是备份也是你后面构造跳板时“原始指令”部分的来源。注意x86指令长度不定你不能假设被覆盖的指令刚好5字节。如果原指令是2字节你写5字节跳转就会多覆盖3字节跳回来的时候就会跳过这3字节导致逻辑错误。所以更稳妥的做法是从注入点开始逐条反汇编累加指令长度直到总长度大于等于5字节记下这个总长度N。然后你写跳转时覆盖N字节跳板里先执行这N字节对应的原始指令再跳回注入点N。易语言没有内置反汇编引擎你可以用第三方支持库或者手动用一张简化的指令长度表来判断常见指令。对于研究用途我建议先用调试器人工确认指令长度把N写死在代码里等逻辑跑通再考虑自动化。4.2 第二步构造跳转指令和跳板代码最常用的跳转是E9相对跳转格式是E9 4字节有符号偏移偏移 目标地址 - (当前地址 5)。在易语言里计算这个偏移要注意整数溢出和符号问题。易语言的整数是32位有符号计算时如果结果超出范围会出错。你可以用“到长整数”转换后再截断或者用无符号运算支持库。跳板代码通常放在目标进程的一块可执行内存里。如果你用VirtualAllocEx申请地址可能离注入点很远超过2GB范围时E9跳转的32位偏移就不够用了。这时候要么用FF25绝对跳转需要6字节要么在注入点附近找一块空闲内存代码洞。易语言里找代码洞比较费劲我一般直接用VirtualAllocEx申请然后判断距离如果太远就改用6字节的绝对跳转方案。跳板代码的结构大致如下先保存所有通用寄存器pushad然后执行你的自定义逻辑比如修改某个内存值、调用某个API、记录日志再恢复寄存器popad接着执行被覆盖的原始N字节指令最后跳回注入点N。如果你的自定义逻辑会修改EFLAGS还要pushfd和popfd。这些机器码在易语言里以字节集形式拼接每个字节都要算准。4.3 第三步写入并验证写入前先用VirtualProtectEx把注入点所在内存页改成PAGE_EXECUTE_READWRITE写入完成后再改回原来的保护属性通常是PAGE_EXECUTE_READ。这一步很多人会忘结果目标程序运行到注入点时因为内存不可写而触发异常。改回保护属性也很重要长期保持可写可执行会降低安全性也容易被某些保护机制发现。写入后不要急着让目标程序继续跑先用ReadProcessMemory把写入的字节读回来跟你的预期字节集逐字节比对。确认无误后再考虑恢复目标线程。如果是通过挂起线程再改内存的方式恢复线程前最好用FlushInstructionCache刷新指令缓存虽然x86架构通常不需要但在多核环境下这是个好习惯。验证阶段我建议分三步第一步目标程序单步执行到注入点确认跳转到了跳板第二步跳板执行完确认回到了正确地址第三步让程序连续运行一段时间观察是否有崩溃或行为异常。这三步都过了才算基本可用。5. 那些让我熬夜排查的坑EIP注入的典型故障与修复5.1 跳转后目标进程无响应或直接退出这是最常见的问题原因通常有三个。第一跳板代码里的寄存器保存不完整。比如你只pushad了但你的代码修改了EFLAGSpopad不会恢复EFLAGS目标程序后续的条件跳转就会乱套。第二跳板代码执行了会阻塞的操作比如等待用户输入、访问网络、申请大量内存导致目标线程卡死。第三跳板里的API调用使用了错误的调用约定导致栈不平衡函数返回时EIP飞到非法地址。排查方法在跳板代码开头和结尾各写一个简单的标记比如往一块已知内存写一个魔数然后用调试器附加看标记有没有被写入、写入顺序对不对。如果开头标记有、结尾标记没有说明跳板中间崩溃了如果两个都有但程序还是异常说明跳回地址算错了。5.2 多线程下随机崩溃前面提过线程安全这里展开说。假设你的跳板里有一个全局计数器每次执行加一。单线程时没问题多线程时两个线程可能同时读到同一个值各自加一后写回结果只加了一次。更严重的是如果跳板里动态申请内存或者调用非线程安全的API可能直接导致堆损坏。解决办法是在跳板里尽量避免使用共享状态如果必须用就用原子指令如lock inc或者临界区。易语言里实现原子操作需要写机器码或者调用InterlockedIncrement这类API。另一个多线程坑是“注入过程中目标线程正在执行注入点附近的代码”。如果你挂起线程再改内存改完恢复通常没问题。但如果你不挂起线程直接改可能改到一半目标线程就执行过去了执行到半条跳转指令直接崩溃。所以写入前挂起所有线程是必要的写入完成后再恢复。5.3 注入成功但目标程序行为异常有时候注入没崩溃但目标程序的行为跟预期不符。比如你本来想拦截一个计算函数结果发现计算结果偶尔不对。这可能是你的跳板修改了某个寄存器而目标程序后续代码依赖这个寄存器的原值。x86的通用寄存器有8个加上EFLAGS和段寄存器任何一处没保存好都可能出问题。我的经验是跳板里除了pushad/popad还要显式保存和恢复EFLAGS如果用到浮点运算还要保存FPU状态。宁可多保存不要少保存。还有一种情况是“指令重定位”问题。你覆盖的N字节里可能包含相对跳转或相对调用指令这些指令的偏移是相对于原地址计算的。你把它们搬到跳板里执行地址变了偏移就不对了。解决办法是识别这类指令并重新计算偏移或者干脆选择不包含相对跳转的注入点。后者更简单但需要你在选择注入点时多花点功夫。5.4 杀毒软件误报与兼容性易语言编译出来的程序本身就容易被某些安全软件误报加上注入行为误报率更高。如果你是在自己机器上做研究可以把工作目录加入白名单。如果是要分发给别人用建议用C重写核心部分或者对易语言程序做加壳处理但加壳又可能引入新的兼容性问题。这个没有完美方案只能根据实际场景权衡。兼容性方面32位和64位要分清。本文讨论的EIP注入基于x86架构32位进程和64位进程的寄存器宽度、调用约定、内存布局都不同。易语言编译的是32位程序所以它只能注入32位目标进程。如果你要注入64位进程需要64位的注入器和64位的跳板代码易语言在这方面支持很弱建议换工具。6. 从“能跑”到“好用”稳定性与可维护性的经验谈6.1 把注入配置外置别写死在代码里我早期做这类工具时把注入地址、原始指令、跳板逻辑全写死在易语言代码里结果每次换个目标程序就要重新编译。后来改成用配置文件比如ini或json描述注入点地址偏移、覆盖长度、跳板类型、自定义参数。易语言读配置很简单这样同一个注入器可以适配多个目标调试时改配置就行不用反复编译。配置里我一般会记录这些字段模块名、偏移、覆盖字节数、原始字节十六进制字符串、跳板代码类型、自定义数据。原始字节用于校验防止目标程序版本变了导致注入点错位。如果校验不通过注入器直接报错退出而不是盲目写入导致崩溃。6.2 日志是排查问题的生命线注入失败时GetLastError只能告诉你最后一个API调用为什么失败但无法告诉你前面哪一步出了问题。所以我在每个关键步骤后都写日志OpenProcess返回什么、VirtualProtectEx是否成功、写入的字节数对不对、读回校验是否一致。日志写到文件里出问题时直接看日志比用调试器一步步跟快得多。易语言写文件日志很简单但要注意多线程下日志文件可能被同时写入。我的做法是单独开一个日志线程其他线程把日志消息放进队列日志线程负责落盘。如果不想这么复杂至少给文件操作加个临界区。6.3 卸载与恢复别忘了留后路永久注入不代表不能卸载。好的注入器应该提供“恢复原始指令”的功能把之前备份的原始字节写回注入点释放申请的跳板内存恢复内存保护属性。这样目标程序就能回到注入前的状态。我见过一些工具只注入不恢复目标程序运行久了内存里全是跳板既浪费又危险。恢复的时机也很重要。如果目标程序正在执行注入点附近的代码你直接恢复可能造成指令流断裂。稳妥做法是先挂起所有线程确认没有线程的EIP落在注入点或跳板范围内再执行恢复。这个判断在易语言里可以通过GetThreadContext获取每个线程的EIP来实现虽然麻烦但值得做。6.4 性能影响的评估EIP注入会在每次执行到注入点时增加一次跳转和跳板执行的开销。如果注入点在热点循环里这个开销可能被放大。我实测过一个每秒执行百万次的循环加入跳板后性能下降约15%主要消耗在pushad/popad和跳板里的逻辑上。如果你的跳板逻辑很重下降会更明显。所以选择注入点时要考虑执行频率非必要不要往热点路径上挂。如果确实需要在热点路径上注入可以优化跳板只保存和恢复你用到的寄存器而不是全部pushad把复杂逻辑改成条件触发比如每执行一千次才做一次实际处理。这些优化能显著降低开销但会增加代码复杂度需要根据实际需求权衡。7. 关于合法性与技术边界的个人体会写到这里技术层面的东西基本讲完了。最后我想聊聊边界问题。EIP注入这项技术本身是中性的它在软件调试、兼容性修复、安全研究、自动化测试里都有正当用途。比如老软件在新系统上跑不起来你可以用注入的方式打补丁比如你要测试自己程序的异常处理逻辑可以用注入模拟各种错误。但同样的技术如果用在未经授权的程序上就可能触碰法律红线。我的原则是只对自己有源码或有明确授权的程序做注入做出来的工具不公开传播、不用于商业目的研究过程中如果发现目标程序有安全漏洞走正规渠道反馈而不是利用。这些原则看起来简单但实际做的时候很容易因为“技术好玩”而越界。技术能力越强越需要清楚自己能做什么、不能做什么。另外易语言社区里关于注入的讨论有时会走向两个极端要么把它神秘化觉得是“黑客技术”要么把它简单化觉得复制粘贴代码就能用。实际上它介于两者之间——原理不复杂但细节极多需要耐心调试和严谨验证。如果你能坚持把每一个崩溃都当成学习机会去排查而不是换个代码继续试你会在这条路上走得更远。这个内容后续还可以往两个方向扩展一是结合特征码扫描实现自动定位注入点让工具适配不同版本的目标程序二是研究更隐蔽的注入方式比如利用异常处理机制做无痕劫持。这两个方向都需要更深的系统底层知识有兴趣的话可以先把本文的基础打牢再往上走。

相关新闻

纯JavaScript手写神经网络:从矩阵到反向传播实战

纯JavaScript手写神经网络:从矩阵到反向传播实战

这篇是 JavaScript 深度学习的第二篇。上一篇我从整体聊了聊为什么在前端做深度学习、有哪些现成库可以用、浏览器里跑模型的可行边界在哪,很多人看完觉得不过瘾,说光聊生态和选型不够,能不能真的从零写一个能训练、能推理的神经网络出来&…

2026/10/14 11:28:36 阅读更多 →
盾构隧道橡胶密封垫动态力学分析与优化

盾构隧道橡胶密封垫动态力学分析与优化

1. 项目背景与工程意义 盾构隧道接缝密封系统是确保地下工程防水性能的关键部件,其中复合式密封垫的压缩变形特性直接影响隧道结构的长期密封效果。在实际工程中,橡胶密封垫需要承受千斤顶推力、水土压力和地震荷载等多种动态载荷,传统静态分…

2026/10/14 11:28:36 阅读更多 →
文件外发管控:多场景差异化配置方案,拒绝一刀切策略

文件外发管控:多场景差异化配置方案,拒绝一刀切策略

为什么一套策略无法适配全部企业环境很多 IT 负责人部署文件外发管控时,习惯直接套用网上标准模板,上线后频繁出现业务受阻、大量误拦截问题。1.小微企业 IT 人手不足,无法维护复杂审批流程;2.中型企业部门多、业务线复杂&#xf…

2026/10/14 11:27:35 阅读更多 →

最新新闻

yolov8-face 核心算子全解析:NMS、边界框格式转换与掩码处理的源码级指南

yolov8-face 核心算子全解析:NMS、边界框格式转换与掩码处理的源码级指南

人工智能计算机视觉深度学习 【免费下载链接】yolov8-face yolov8 face detection with landmark 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-face 点击查看 免费下载 本文是 ops.md 参考文档的深度展开,以 ultralytics/yolo/utils/ops.py 为…

2026/10/14 20:49:14 阅读更多 →
自学嵌入式第二天(C语言篇——数据类型)

自学嵌入式第二天(C语言篇——数据类型)

琐碎的敲代码内功。(以为很简单 ,结果全是坑)1.C语言提供的数据类型2.整数类型常量:在程序运行过程中,其值不能被改变的量变量:在程序运行过程中,其值能被改变的量(1)整型…

2026/10/14 20:49:14 阅读更多 →
openJiuwen 记忆引擎基础模型:MemInfo 单条记忆信息结构全解

openJiuwen 记忆引擎基础模型:MemInfo 单条记忆信息结构全解

人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习 【免费下载链接】agent-core-java openJiuwen agent core Java是 openJiuwen Core的 Java版本,提供AI Agent开发、运行、调优与演进相关的全套SDK能力。 项目地址: https://gitco…

2026/10/14 20:49:14 阅读更多 →
模拟退火求解二维装箱问题:原理、实现与工程调优

模拟退火求解二维装箱问题:原理、实现与工程调优

模拟退火算法求解装箱问题,我第一次真正上手,是在一个托盘排样项目里。需求方只说了一句话:把尺寸不一的纸箱尽量多地放进托盘,允许90度旋转,不许压坏。我当时觉得,这就是矩形排样,先求个面积下…

2026/10/14 20:49:14 阅读更多 →
51单片机DHT11温湿度采集实战:从仿真到实物的完整拆解

51单片机DHT11温湿度采集实战:从仿真到实物的完整拆解

简介:一套以51单片机为核心的温湿度采集监控完整工程,面向电子爱好者、嵌入式初学者及课程设计学生。资料基于Keil平台,由C语言编写,实现温湿度采集(SHT10传感器)、日历时钟(DS1302)…

2026/10/14 20:49:14 阅读更多 →
Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现财务审计中监管合规性的自动验证,旨在解决传统审计中人工验证合规性的低效问题。研究对比了开源LLMs(如Llama-2系列)与专有LLMs(如OpenAI的GPT系列)在合规性检测中的性能,使用了普华永道(PwC)提供的两个自定义…

2026/10/14 20:48:13 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →