lldb python 脚本扩展之超级断点增强版

使用Python扩展lldb Xcode集成了LLDB,进一步简化了程序调试流程。虽然LLDB很强大,但是它的命令很有限。所幸的是,lldb包含了对python的支持,使得lldb的拓展成为可能。本人在开发过程中很喜欢使用image lookup 命令,但是苦于每次只能执行一条,相当耗时,因此一直想要找到一种批量执行的方法。于是将目光放到了lldb python上…… 问题:批量执行image lookup -a (1 阅读详情

lldb python 脚本扩展之超级断点增强版

引言

不知道各位在逆向ios用到lldb的时候是啥感觉,反正我是服了。没界面到算了,各种跳转和断点用起来不知道有多麻烦。所以我尽量用静态分析。不过越往后,越发现,光静态实在是不行。

  1. ios不知道有没有动态解密一说,就是把mach-o加密的部分在加载的时候再解密。android和windows上有一种方式叫做dump内存,可以把加载后解密的部分保存下来,但我在ios上用lldb memory read dump的时候发现限制了1024字节,后来又想把一堆1024字节拼起来,有发现不是所有的地址都能读。于是乎,我怀疑,ios内存读写存在限制。不知是否?有明白的希望留言告知。
  2. 网上有个python lldb的超级断点的脚本,本工具经该工具改编而来,原作者不详,大家可以查下。
  3. ios和window汇编上有个说法上的不同,模块的地址ios上叫ASLR偏移,而windows上叫基地址。我们反编译工具里的地址,ios叫做基地址,windows上叫偏移offset.好像正好相反,文中按照ios本来的叫法说明。

lldb 断点之困

lldb下断点之前都有一个偏移查找的过程,“image list -o -f”。其实其他平台也类是,超级断点这个工具的核心就是把模块偏移寻找的过程自动化,让我们只需要输入基地址就可以在目标地址下断点的脚本。当然这一切的前提是,lldb预留了python的接口,否则就悲催了。
简单介绍下代码:

def get_ASLR():
    # 获取‘image list -o’命令的返回结果
    interpreter = lldb.debugger.GetCommandInterpreter()
    returnObject = lldb.SBCommandReturnObject()
    interpreter.HandleCommand('image list -o', returnObject)
    output = returnObject.GetOutput();
    # 正则匹配出第一个0x开头的16进制地址
    match = re.search(r'(1\]\s)(0x[0-9a-fA-F]+)', output)
    if match:
        return match.group(2)
    else:
        return None

代码很简单,通过接口执行lldb命令得到返回的数据,正则匹配出用户模块偏移量。

def sbr(debugger, command, result, internal_dict):
    #用户是否输入了地址参数
    if not command:
        print >>result, 'Please input the address!'
        return
    ASLR = get_ASLR()
    if ASLR:
        #如果找到了ASLR偏移,就设置断点
        debugger.HandleCommand('br set -a "%s+%s"' % (ASLR, command))
    else:
        print >>result, 'ASLR not found!'
# And the initialization code to add your commands 

同样利用接口把我们输入的基地址和偏移传入lldb执行命令。

用户态代码的锁定

这里到了我胡编乱造的时候,我在调试ios的发现,object-c反汇编后的代码有一个很大的特点,就是喜欢在汇编代码块里乱跳。可能是更object-c和arm的运行机制有关,导致我们的代码在用户模块里的过程很难捕捉到,一句话,单步走功能就是个坑。
为了解决这个问题,我在以上脚本的基础上,利用断点功能实现了两大扩展。
1.单步执行在本模块,坚决不跳到其他模块的单步走
2.多条指令一键式执行,只要输入执行指令数,一条命令立刻执行到位。同样执行过程锁定在同一个模块。
(你要想去其他模块,本身的命令就够了)

正真意义上的单步执行

首先,我们要获得当前指令的地址,很简单,“register read/x pc”
同样我们正则匹配出地址字符串返回。


def get_pc():
    # 获取‘image list -o’命令的返回结果
    interpreter = lldb.debugger.GetCommandInterpreter()
    returnObject = lldb.SBCommandReturnObject()
    interpreter.HandleCommand('register read/x pc', returnObject)
    output = returnObject.GetOutput();
    # 正则匹配出第一个0x开头的16进制地址
    match = re.match(r'.+(0x[0-9a-fA-F]+)', output)
    if match:
        return match.group(1)
    else:
        return None

然后在下一条指令的本模块下一条地址的地方下断点,并执行到断点

 ADDRESS = get_pc()
    #增加断点
    if not command:
        if ADDRESS:
            debugger.HandleCommand('br set -a "%s+4"' % (ADDRESS))
            print 'br set success:"%s+4"'%ADDRESS
        #执行到断点
            debugger.HandleCommand('c')
            NUM = getbrlistn()

执行完毕删除断点

    NUM = getbrlistn()
        #删除断点
            if NUM:
                debugger.HandleCommand('br dele %s' % (NUM))
                print "br dele success:%s"%NUM
            else:
                print >>result, 'br list number not found!'
        else:

这里还有个获取上一步断点并删除的操作。同样正则。

#得到最后断点的标号
def getbrlistn():
    interpreter = lldb.debugger.GetCommandInterpreter()
    returnObject = lldb.SBCommandReturnObject()
    interpreter.HandleCommand('br list', returnObject)
    output = returnObject.GetOutput();
    # 正则匹配出所有的断点代号
    match = re.findall(r'(^\d{1,4})(:\saddress)', output,re.M)
    if match:
        num=len(match)
        strlast=match[num-1]
        brnum=strlast[0]
        #print brnum
        return brnum
    else:
        return None
# Super breakpoint

单步基础上的多步执行

基本和单步执行的代码一样,不同之处在于我们需要传入执行步数,command.并转换到响应的地址下断点。

offby=int(command,16)*4
        if ADDRESS:
            debugger.HandleCommand('br set -a "%s+%x"' % (ADDRESS,offby))
            print 'br set success:"%s+%x"'%(ADDRESS,offby)
            #执行到断点
            debugger.HandleCommand('c')

然后就是执行到断点和删除断点。

获得静态编译的地址

同样的,我们执行到某个位置后想在ida里静态查看下相应的代码,也给他自动化一下。

def idaposi(debugger, command, result, internal_dict):
    ASLR=get_ASLR()

    PCADD=get_pc()
    print "ASLR:",ASLR
    print "trueADDR:",PCADD
    if (ASLR!=None)&(PCADD!=None):
        #print ASLR
        #print PCADD
        addr=int(PCADD,16)-int(ASLR,16)
        print "idaposition_address:ox%x"%addr
    else:
        print "get info error"  

这下齐全了。各位可以自己敲一下,把代码改成这样就能用了。
完整代码在下面。

#!/usr/bin/python
#coding:utf-8
'''
执行以下脚本导入超级断点工具

(lldb) command script import ~/workspace/3-lldb/subr.py
The "sbr" python command has been installed and is ready for use.
(lldb)
输出安装成功,只需就收一个地址就可工作
subr 地址

(lldb) br delete
About to delete all breakpoints, do you want to do that?: [Y/n] y
All breakpoints removed. (1 breakpoint)
(lldb) subr 0x00000001000093dd
Breakpoint 2: where = Calculator`___lldb_unnamed_function161$$Calculator, address = 0x000000010cb033dd
(lldb)
对于经常使用的脚本,可以在lldb的初始化文件里添加命令加载脚本,启动自定义的命令
修改~/.lldbinit文件,在文件里加入一行

command script import ~/sbr.py
'''
import lldb
import commands
import optparse
import shlex
import re
# 获取ASLR的偏移地址
def get_ASLR():
    # 获取‘image list -o’命令的返回结果
    interpreter = lldb.debugger.GetCommandInterpreter()
    returnObject = lldb.SBCommandReturnObject()
    interpreter.HandleCommand('image list -o', returnObject)
    output = returnObject.GetOutput();
    # 正则匹配出第一个0x开头的16进制地址
    match = re.search(r'(1\]\s)(0x[0-9a-fA-F]+)', output)
    if match:
        return match.group(2)
    else:
        return None

def get_pc():
    # 获取‘image list -o’命令的返回结果
    interpreter = lldb.debugger.GetCommandInterpreter()
    returnObject = lldb.SBCommandReturnObject()
    interpreter.HandleCommand('register read/x pc', returnObject)
    output = returnObject.GetOutput();
    # 正则匹配出第一个0x开头的16进制地址
    match = re.match(r'.+(0x[0-9a-fA-F]+)', output)
    if match:
        return match.group(1)
    else:
        return None
#得到最后断点的标号
def getbrlistn():
    interpreter = lldb.debugger.GetCommandInterpreter()
    returnObject = lldb.SBCommandReturnObject()
    interpreter.HandleCommand('br list', returnObject)
    output = returnObject.GetOutput();
    # 正则匹配出所有的断点代号
    match = re.findall(r'(^\d{1,4})(:\saddress)', output,re.M)
    if match:
        num=len(match)
        strlast=match[num-1]
        brnum=strlast[0]
        #print brnum
        return brnum
    else:
        return None
# Super breakpoint
def sni(debugger, command, result, internal_dict):
    ADDRESS = get_pc()
    #增加断点
    if not command:
        if ADDRESS:
            debugger.HandleCommand('br set -a "%s+4"' % (ADDRESS))
            print 'br set success:"%s+4"'%ADDRESS
        #执行到断点
            debugger.HandleCommand('c')
            NUM = getbrlistn()
        #删除断点
            if NUM:
                debugger.HandleCommand('br dele %s' % (NUM))
                print "br dele success:%s"%NUM
            else:
                print >>result, 'br list number not found!'
        else:
            print >>result, 'ADDRESS not found!'
    else:
        offby=int(command,16)*4
        if ADDRESS:
            debugger.HandleCommand('br set -a "%s+%x"' % (ADDRESS,offby))
            print 'br set success:"%s+%x"'%(ADDRESS,offby)
            #执行到断点
            debugger.HandleCommand('c')
            NUM = getbrlistn()
            #删除断点
            if NUM:
                debugger.HandleCommand('br dele %s' % (NUM))
                print "br dele success:%s"%NUM
            else:
                print >>result, 'br list number not found!'
        else:
            print >>result, 'ADDRESS not found!'

def idaposi(debugger, command, result, internal_dict):
    ASLR=get_ASLR()

    PCADD=get_pc()
    print "ASLR:",ASLR
    print "trueADDR:",PCADD
    if (ASLR!=None)&(PCADD!=None):
        #print ASLR
        #print PCADD
        addr=int(PCADD,16)-int(ASLR,16)
        print "idaposition_address:ox%x"%addr
    else:
        print "get info error"  

def sni2(debugger, command, result, internal_dict):

    NUM = getbrlistn()
    #删除断点
    if NUM:
        #print "%d"%NUM
        debugger.HandleCommand('br dele %s' % (NUM))
        print NUM
    else:
        print >>result, 'br list number not found!'
# And the initialization code to add your commands 
# Super breakpoint
def sbr(debugger, command, result, internal_dict):
    #用户是否输入了地址参数
    if not command:
        print >>result, 'Please input the address!'
        return
    ASLR = get_ASLR()
    if ASLR:
        #如果找到了ASLR偏移,就设置断点
        debugger.HandleCommand('br set -a "%s+%s"' % (ASLR, command))
    else:
        print >>result, 'ASLR not found!'
# And the initialization code to add your commands 
def __lldb_init_module(debugger, internal_dict):
    # 'command script add sbr' : 给lldb增加一个'sbr'命令
    # '-f sbr.sbr' : ¸该命令调用了sbr文件的sbr
    debugger.HandleCommand('command script add subr -f subr.sbr')
    debugger.HandleCommand('command script add sni -f subr.sni')
    debugger.HandleCommand('command script add idap -f subr.idaposi')
    print 'The "sbr" python command has been installed and is ready for use.'
macOS逆向工程:从工具链配置到安全分析的完整实战指南 逆向工程是分析软件内部工作原理、数据流和控制流的关键技术,广泛应用于安全研究、漏洞挖掘和软件调试。其核心原理是通过静态与动态分析,将编译后的二进制程序还原为可理解的逻辑。在macOS平台,这一技术价值尤为突出,既能用于学习优秀的代码实现,也能有效检测恶意软件与安全漏洞。应用场景包括分析Objective-C/Swift运行时、探索Mach-O文件格式以及进行动态插桩。本文聚焦于macOS逆向工程的完整工具链配置,详细介绍了Hopper Disassembler、LLDB和Frida等核心工具的使用,并深入探 阅读详情

相关推荐

iOS逆向实战:使用Frida-trace动态追踪CCCrypt加密函数

在移动安全与逆向工程领域,动态插桩技术是分析应用运行时行为的关键手段。其核心原理是通过注入代码到目标进程,实时监控函数调用、参数传递与返回值,从而绕过静态分析的局限与反调试机制。这项技术的核心价值在于能够以非侵入、自动化的方式,透视应用内部逻辑,尤其适用于定位加解密、网络通信等核心功能。在iOS平台,Frida框架及其工具链是实现动态插桩的利器,广泛应用于安全研究、漏洞挖掘与协议分析等场景。本文聚焦于使用Frida-trace这一高效工具,针对iOS系统加密库CommonCrypto中的核心函数CCCryp

weixin_34378767的博客 451

iOS调试技巧——使用Python 自定义LLDB

只需要将命令command script import /Users/xx/Desktop/lldbtest.py 写入这个文件即可。至此,直接在Xcode中使用lldb打印出[MyClass lldbTest]的返回值就完成了。lldb_test表示命令名称,lldbtest是Python文件名,test是自定义方法名。/Users/xx/Desktop/lldbtest.py是Python文件路径。在使用Python 自定义LLDB之前,先了解一下LLDB的一些类型。####1、新建Python文件。

u012903898的博客 1202

Windows C++开发环境配置:MinGW-w64安装与VS Code集成指南

在Windows平台进行C++开发时,GNU编译器集合(GCC)是遵循POSIX标准的开源项目广泛使用的工具链。其核心原理是通过编译器将源代码转换为可在目标系统运行的原生可执行文件。对于需要在Windows环境编译跨平台代码的开发者而言,MinGW-w64技术方案提供了不依赖第三方运行时环境的GCC移植版本,能直接生成原生Windows可执行文件,极大提升了开发效率与兼容性。本文聚焦于MinGW-w64这一具体实现,详细解析其与MSYS2环境的区别,并提供从环境变量配置到集成开发环境调试的完整工程实践方案,

weixin_30599769的博客 335

编写一个watchdog.sh脚本_编写 LLDB 调试器脚本

LLDB 调试器提供对 Python 脚本的支持,可以执行一些自动化的操作,提供工作效率。本文从 HelloWorld 开始学习如何编写 LLDB 脚本。编写第一个 LLDB 脚本下面我们来实际操作编写 LLDB 调试器脚本。在计算机上建立一个目录用于存脚本文件,比如我们在 /Users/exchen/lldb 这个目录下操作,新建一个 HelloWorld.py 的文件,输入下面的代码...

weixin_39815435的博客 281

CSP认证C++环境搭建:从GCC编译器到VSCode高效配置指南

集成开发环境(IDE)是程序员进行软件开发的核心工具,它通过整合代码编辑器、编译器、调试器等组件,极大提升了编码效率和项目管理能力。其工作原理在于提供一个统一的图形化界面,管理项目文件、调用底层工具链并实时反馈编译和运行信息。对于C++开发者而言,一个配置得当的本地环境不仅能加速学习曲线,更是保障代码质量、进行高效调试的基础。在算法竞赛和软件能力认证(如CSP)等特定应用场景中,环境配置的稳定性和与考场环境的一致性尤为关键,直接影响到编译通过率和最终成绩。本文聚焦于使用GCC编译器和VSCode编辑器,详细

weixin_34327223的博客 360

微信消息防撤回技术原理与实战:从Hook到数据备份的完整指南

在即时通讯软件中,消息撤回功能为用户提供了纠错便利,但其背后的客户端-服务器交互机制与本地数据处理逻辑,构成了现代软件工程中典型的数据同步与状态管理案例。理解这一机制,需要从网络协议分析、本地数据存储和进程间通信等基础技术切入。通过Hook技术拦截关键函数调用,或监控网络流量过滤特定指令,可以在不破坏原有通信流程的前提下,实现消息的本地留存。这种技术实践不仅有助于深入理解客户端安全与逆向工程原理,更在数据备份、通信审计等场景中具有实用价值。本文聚焦于微信平台,详细剖析了防撤回的三大实现路径——本地数据Hoo

weixin_34302561的博客 307

来一点调试技巧,lldb 的 Scripting Bridge 框架,新手友好的 Debug 进阶

常常羡慕前端开发、RN 、Flutter 和 SwiftUI 开发的 live rendering, 即时渲染 别家项目的框架,UI 开发,修改了,很容易渲染出来。无需每次手动漫长的编译 其实,lldb 自带了一个 python 解析器。要调试代码逻辑,不需要重新编译, kill 进程。 当前进程下,可以直接调试。 常用的是,苹果封装的一些命令。也可以根据自己的工程,自己写定制化的 python ...

dengjiangszhan的博客 611

VSCode 32位便携版zip:从绿色部署到AI插件接入的完整指南

在软件工具快速迭代的今天,兼容性与轻量化部署依旧是开发环境搭建中的核心诉求。Visual Studio Code 作为主流代码编辑器,其 zip 免安装形态为受限环境提供了灵活方案,尤其是 ia32 架构的 32 位版本,常用于旧电脑或精简系统。便携模式通过创建 data 目录,实现配置与插件全量自包含,配合 PATH 注册与语言环境配置,即可构建稳定可迁移的开发环境。面对日益普及的大模型编程辅助,GLM、DeepSeek 等模型可借助 OpenAI 兼容接口无缝接入,而 Codex、Claude Code

weixin_30572613的博客 531

iOS逆向(7)-LLDB,自制LLDB脚本,窜改微信红包金额

在上篇文章从fishhook看runtime,hook系统C函数中已经提到了利用LLDB的部分命令。在我们玩逆向的时候在大多数时候其实是拿不到源码的。所以了解一些LLDB来辅助我对别人APP的学(破)习(坏),是非常有必要的。 自从开始玩逆向,总是会有一些大佬给我发一些转账信息(为什么不是发红包?红包金额有限制,拿不出手),金额还挺大。 都是类似于这样的。 那么道友们想不想都收到这样的红包呢?看...

weixin_34212762的博客 477

cpython-lldb:LLDB扩展,用于调试Python程序

概述 cpython_lldb是用于调试Python程序的LLDB扩展。 这对于解决解释器或外部库中的卡住的线程和崩溃可能很有用。 与大多数Python调试器不同,LLDB允许您不需进行检测就将其附加到正在运行的进程,或者加载coredump并对问题进行事后分析。 在分析Python进程的状态时,通常您只能访问解释器级别的信息:每个变量的类型均为PyObject *,并且堆栈跟踪将仅包含CPython内部调用和对外部库的调用。 除非您是CPython开发人员,否则需要对解释器实现中的某些错误进行故障诊断,否则通常不会很有用。 但是,此扩展允许您提取有关程序执行的应用程序级信息:打印变量的值,列出源代码,显示Python堆栈跟踪等。 虽然CPython的本身提供了GDB类似的扩展,一个仍可能更愿意使用LLDB作为调试器,比如在Mac OS。 cpython_lldb要求使用调试符号

Pywinauto与Inspect.exe完美搭配:解决Windows应用UI自动化中的元素定位难题

本文详细介绍了如何将Pywinauto与Inspect.exe结合,以解决Windows应用UI自动化中的核心难题——元素定位。通过实战指南,阐述了如何利用Inspect.exe在UIA模式下精准侦察控件属性,并将这些信息转化为Pywinauto的稳健定位策略,从而高效自动化WPF、WinForms等现代框架构建的复杂桌面应用。

weixin_29297127的博客 520

探索高效调试新纪元:CodeLLDB —— 跨平台LLDB调试器的可视化增强版

在软件开发过程中,一个强大而灵活的调试工具是提高效率的关键。CodeLLDB,这个开源项目,正是为了满足这样的需求应运而生。它是一款集高级功能于一体的LLDB前端,为C++和Rust等语言提供了出色的调试体验,并支持广泛的编译后语言和多种架构。 ## 项目介绍 CodeLLDB为Visual Studio Code带来了强大的调试功能,包括条件断点、函数断点、日志点,以及硬件数据访问断点(wa...

gitblog_00068的博客 837

基于FMCW技术的毫米波雷达测速原理与应用

调频连续波(FMCW)技术是毫米波雷达中实现高精度测速的核心方法之一。本文详细介绍了FMCW测速的基本原理、信号处理流程以及在实际应用中的关键技术。通过分析FMCW雷达的多普勒效应和频率差测量方法,本文展示了如何利用FMCW技术实现目标速度的高精度检测。此外,本文还探讨了FMCW测速在自动驾驶、智能交通和工业自动化等领域的应用案例,为毫米波雷达开发者提供了理论支持和实践指导。

不谈枯燥公式,只聊雷达趋势。用大白话解读毫米波里的黑科技。 1137

LLDB调试工具集成指南:将自定义脚本无缝融入现有调试工作流

LLDB是一款功能强大的调试工具,通过集成自定义脚本可以显著提升调试效率。本文将详细介绍如何将LLDB自定义脚本无缝融入现有调试工作流,帮助开发者快速掌握这一实用技能。 ## 为什么需要集成LLDB自定义脚本? 在日常调试工作中,我们经常会遇到重复的调试任务。使用LLDB自定义脚本可以将这些任务自动化,节省大量时间和精力。LLDB支持Python脚本扩展,通过编写自定义脚本,我们可以实现断点管

gitblog_00153的博客 388

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

告别简陋行情!在Ubuntu24.04系统用Wine9.0跑同花顺远航版的全流程记录

本文详细记录了在Ubuntu 24.04系统上,通过Wine 9.0兼容层成功安装并流畅运行同花顺远航版的全过程。文章对比了该方案与官方简陋Linux原生版本的功能差异,重点解决了高分辨率屏幕下的字体与界面显示问题,并提供了关键配置调优与长期维护建议,为Linux用户提供了功能完备的专业金融行情解决方案。

weixin_29207533的博客 1074

超越println!:用VSCode+CodeLLDB可视化调试Rust复杂数据结构

本文详细介绍了如何利用VSCode和CodeLLDB工具链实现Rust复杂数据结构的可视化调试,包括环境配置、深度调试技巧和性能优化策略。通过自定义格式化脚本和高级调试配置,开发者可以高效调试HashMap、嵌套结构体等复杂类型,显著提升Rust开发效率。

julia4scientist的博客 745

本地部署gradle

在部署CAS构建执行包时,如果按照CAS的官方命令gradlew clean build,如果系统没安装过gradle,这个步骤将会从网上下载gradle,但是进度非常慢,耗时很长。为了更快地完成项目构建,我们可以直接在本地部署好gradle,节省一点时间。

益添的博客 780

VSCode国密证书改造:构建自主可控的调试与远程开发安全通道

在软件开发领域,TLS/SSL证书体系是保障网络通信安全的基石,它通过公钥基础设施(PKI)建立可信连接,防止数据窃听与篡改。其核心原理在于客户端与服务端基于CA签发的数字证书完成双向身份认证与密钥协商。这一机制对于远程调试、语言服务器通信等开发场景至关重要,能确保代码、调试信息等敏感数据的安全传输。随着信创与自主可控要求的提升,国密算法(SM2/SM3/SM4)逐步成为构建安全可控开发环境的关键技术。本文聚焦于如何在VSCode这一主流开发工具中,通过重构其底层证书信任链,将默认的国际CA体系替换为符合国

weixin_30372371的博客 436

SeedVR2插件双版本共存实战:手把手教你创建幽灵节点解决ComfyUI兼容问题

本文详细介绍了解决ComfyUI中SeedVR2插件新旧版本兼容问题的实战方案。通过目录隔离实现双版本共存,并手把手教你创建‘幽灵节点’来模拟缺失的SeedVR2ExtraArgs节点,从而让旧工作流得以正常运行,同时享受新版本的功能与性能。

red88的博客 1407

计算机技术发展5大阶段,现阶段计算机技术应用及发展

【摘要】现代计算机科学技术的发展和普及运用,为世界各国民众基础性生产生活实践活动的组织开展路径造成了深刻影响,本文围绕现阶段计算机技术应用及发展,择取两个具体方面,展开了简要分析。【关键词】计算机技术;应用;发展改革开放以来,计算机设备的广泛运用,促进了计算机科学技术的逐步发展成熟。计算机科学技术是具备新兴表现特征的尖端应用技术,其在现代工业生产和社会生活实践活动过程中的广泛引入运用,给世界各国基...

weixin_42126677的博客 2637

开发者工具箱实战指南:从VSCode AI插件到数据库工具链的选型与避坑

在软件开发中,工具链的选型直接影响开发效率与工程实践。从代码编辑器、终端到数据库管理,每个环节的工具选择都需权衡功能、成本与适用场景。以VSCode为例,其丰富的插件生态是核心优势,AI辅助编程插件如基于开源模型的CodeGeeX或调用云端API的解决方案,能提供代码补全与生成能力,但需理解其免费条件与能力边界。数据库可视化工具如DBeaver或DataGrip,支持多类型数据库连接与查询,而Redis专用客户端则能提供更直观的监控。工具选择的底层逻辑在于需求驱动,掌握核心概念如Git原理或HTTP协议,比

weixin_34015336的博客 304

【Bug—eNSP】华为eNsp路由器设备启动一直是0解决方案!

软件,添加AR设备时启动异常,最开始错误代码是40,最后通过重新安装,又出现了新的问题,启动AR设备一直是0,而且界面卡住。打开控制面板→网络和Internet→网络和共享中心→更改适配器设置,然后再按以下步骤一次操作。重新打开eNsp,然后选择注册设备,注册成功后重新启动一下,这个时候AR设备就可以正常启动啦。打开eNsp→菜单→工具→选项→服务器设置,写入刚刚写的IP地址就可以了。打开VirtualBox,将左侧的文件全部删除(点击删除所有文件)

享你所想 3417

开发者语音输入实战指南:2026年12款工具横评与工作流集成

语音输入已从通用办公工具演进为开发者核心生产力组件,其本质是将自然语言指令精准映射为可执行代码、IDE操作与调试行为。关键技术原理在于符号级语音识别、上下文感知解析、低延迟端到端反馈及深度IDE集成。相比传统听写,开发者语音工具需支撑TypeScript类型定义、React Hook语法、Git规范提交等工程化场景,技术价值体现在减少认知中断、提升心流连续性与降低手部疲劳。本文基于真实开发环境(含噪声干扰、多框架混用、VS Code全链路验证)横评12款方案,覆盖Whisper.cpp本地模型、GitHub

weixin_30437847的博客 524

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言为何仍是操作系统内核开发的首选?内存管理与硬件交互的绝对优势

在计算机系统编程领域,内存管理和硬件交互是两大核心基础概念。内存管理涉及程序如何分配、使用和释放内存资源,直接关系到程序的性能和稳定性;硬件交互则决定了软件能否直接、高效地控制底层硬件设备。这些底层技术原理构成了操作系统、驱动程序和嵌入式系统等关键基础设施的基石,其技术价值在于实现对计算资源的极致控制和高效利用。在操作系统内核、嵌入式固件、高性能中间件等对性能、资源消耗和确定性要求极高的应用场景中,开发者需要一种能够提供直接内存访问、最小运行时开销和高效硬件抽象的语言。C语言凭借其指针操作、内存布局控制和贴

android_mylove的专栏 443

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Odin语言深度解析:现代系统编程的简洁高效之道

系统编程语言是计算机科学的基础,旨在提供对硬件资源的直接控制和高性能计算能力。其核心原理在于通过编译器将高级代码转换为高效的机器指令,同时平衡内存管理、类型安全和抽象成本。这类语言的技术价值在于构建操作系统、游戏引擎、编译器、嵌入式系统等对性能、可预测性和资源控制有严苛要求的底层软件。在应用场景上,系统编程广泛服务于游戏开发、实时音视频处理、高性能计算和基础设施工具开发。Odin作为一门新兴的现代系统编程语言,精准地定位于此领域。它继承了C语言的底层控制力,同时引入了更清晰的语法、强大的泛型与元编程能力,并

weixin_30411819的博客 362

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: ios逆向分析进阶之关键字加密还原
下一篇: 关于android应用中的签名验证的查找过程
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值