下载,放到'/Applications/IDA Professional 9.0.app/Contents/MacOS/plugins'
pip3
install
keystone-engine
pip3
install
six
# 下载项目
git clone https:
//github
.com
/keystone-engine/keystone
.git
cd
keystone
# 创建build文件夹, 后续编译后的内容都存放在这
mkdir
build
cd
build
修复cmake配置
import os
import re
# 设置根目录
root_dir = '/Users/aaa/Files/bbb/keystone'
# 正则匹配旧版本的 cmake_minimum_required 语句(版本为 2.8 或 2.8.x)
cmake_version_pattern = re.compile(r'^\s*cmake_minimum_required\s*\(\s*VERSION\s*2\.8(\.\d+)?\s*\)', re.IGNORECASE)
# 匹配 CMP0051 块开始和结束
cmp0051_start_pattern = re.compile(r'^\s*if\s*\(\s*POLICY\s+CMP0051\s*\)', re.IGNORECASE)
endif_pattern = re.compile(r'^\s*endif\s*\(?\)?', re.IGNORECASE)
# 递归查找所有 CMakeLists.txt
for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
if filename == 'CMakeLists.txt':
filepath = os.path.join(dirpath, filename)
print(f'处理文件: {filepath}')
with open(filepath, 'r') as f:
lines = f.readlines()
new_lines = []
skip_block = False
for line in lines:
# 替换 cmake_minimum_required 的版本
if cmake_version_pattern.match(line):
new_lines.append('cmake_minimum_required(VERSION 3.5)\n')
continue
# 检测到 CMP0051 起始块
if cmp0051_start_pattern.match(line):
skip_block = True
new_lines.append('# ' + line)
continue
# 如果在 CMP0051 块中,注释所有行,直到 endif
if skip_block:
new_lines.append('# ' + line)
if endif_pattern.match(line):
skip_block = False
continue
# 正常行直接保留
new_lines.append(line)
# 写回原文件
with open(filepath, 'w') as f:
f.writelines(new_lines)
print("✅ 所有 CMakeLists.txt 文件已处理完成。")