标题: 抑制Angr模拟执行期间某些日志 创建: 2026-04-30 16:38 更新: 链接: https://scz.617.cn/python/202604301638.txt Q: 某Angr脚本中有如下代码片段 logging.getLogger( 'angr' ).setLevel( logging.ERROR ) logging.getLogger( 'angr.project' ).setLevel( logging.ERROR ) logging.getLogger( 'angr.sim_manager' ).setLevel( logging.ERROR ) logging.getLogger( 'angr.engines.successors' ).setLevel( logging.ERROR ) 这些主要用于抑制Angr模拟执行期间某些INFO级别的日志输出。在具体实践中,即使 已启用上述代码,仍有其他日志输出,比如 [INFO] Mapping cle##tls at 0x900000 (loader:_map_object) [INFO] Created extern symbol for dlsym (__init__:make_extern) [INFO] no PT_LOAD segments identified (elf:__init__) 想抑制它们,如何下手? A: scz 2026-04-30 可在Python的site-packages目录下查看相关目录,比如 angr archinfo bitarray bitstring cachetools capstone cart cffi claripy cle Crypto cxxheaderparser elftools keystone msgspec networkx ordlookup psutil pycparser pydemumble pypcode pyvex rich setuptools sortedcontainers unicorn z3 当时用"pip3 install angr"安装的,不知装了这么多依赖模块。这次先看angr子目 录的修改时间,再获取修改时间与之精确匹配的所有子目录名,得到上述列表。 powershell -Command "$t=[datetime]'2026-01-19 13:49'; Get-ChildItem -Directory | Where-Object { $_.LastWriteTime -ge $t -and $_.LastWriteTime -lt $t.AddMinutes(1) } | ForEach-Object { $_.Name }" 这些目录下的py中可能含有这种代码片段 l = logging.getLogger(name=__name__) log = logging.getLogger(name=__name__) 用下列方式输出日志 l.info("Using builtin SimProcedure for %s from %s", ...) log.info("Created extern symbol for %s", name) 这是INFO级别的日志,其他级别的有相应函数,比如 log.debug log.warning log.error 接下来处理具体案例 案例1 [INFO] Mapping cle##tls at 0x900000 (loader:_map_object) 这种,大概率有格式串,合理猜测有行代码会出现 .info("Mapping 然后"Find in files",找到 cle\loader.py def _map_object log.info("Mapping %s at %#x", obj.binary, base_addr) 没看明白实际日志中"(loader:_map_object)"是怎么加进去的,可能是log.info取调 用栈回溯信息,加上去的。这提示我们,下次看到这种日志,搜lorder.py,搜 _map_object函数。 现在可知抑制上述日志的代码 logging.getLogger( 'cle.loader' ).setLevel( logging.ERROR ) 案例2 [INFO] Created extern symbol for dlsym (__init__:make_extern) 从案例1的经验中可知,去找某个__init__.py中的make_extern函数 cle\backends\externs\__init__.py def make_extern log.info("Created extern symbol for %s", name) 抑制方案 logging.getLogger( 'cle.backends.externs' ).setLevel( logging.ERROR ) 案例3 [INFO] no PT_LOAD segments identified (elf:__init__) 去找elf.py中的__init__函数 cle\backends\elf\elf.py class ELF def __init__ log.info("no PT_LOAD segments identified") 抑制方案 logging.getLogger( 'cle.backends.elf.elf' ).setLevel( logging.ERROR ) -------------------------------------------------------------------------- 抑制INFO级别的Angr日志,主要考虑它们太干扰视线。我的Angr脚本有许多自定义调 试日志,与前者混在一起输出,有洁癖时受不了这个。案例1、2以前就抑制成功过, 当时未写笔记,认为不是反复碰上的技术问题。最近遭遇案例3,想抑制时却发现浑 然忘却如何处理案例1、2的。决定写份技术笔记,避免今后反复折腾。写笔记时意外 小结出案例1中展示的经验,若不写笔记,不会抠这么细。 楞搜特征字符串时,要注意格式串的可能形式,避免漏报。