Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
DoraemonKit
提交
feb8d6dc
D
DoraemonKit
项目概览
DiDi
/
DoraemonKit
8 个月 前同步成功
通知
166
Star
19623
Fork
3062
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DoraemonKit
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
feb8d6dc
编写于
11月 04, 2021
作者:
C
ChasonTang
提交者:
GitHub
11月 04, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(iOS): vm_protect() force shared library const data copy memory page (#932)
上级
9657a5bd
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
11 addition
and
36 deletion
+11
-36
DoraemonKit.podspec
DoraemonKit.podspec
+1
-1
iOS/DoraemonKit/Src/Core/Util/fishhook/doraemon_fishhook.c
iOS/DoraemonKit/Src/Core/Util/fishhook/doraemon_fishhook.c
+6
-31
iOS/Podfile.lock
iOS/Podfile.lock
+4
-4
未找到文件。
DoraemonKit.podspec
浏览文件 @
feb8d6dc
...
...
@@ -7,7 +7,7 @@
Pod
::
Spec
.
new
do
|
s
|
s
.
name
=
'DoraemonKit'
s
.
version
=
'3.1.
1
'
s
.
version
=
'3.1.
2
'
s
.
summary
=
'iOS各式各样的工具集合'
s
.
description
=
<<-
DESC
iOS各式各样的工具集合 Desc
...
...
iOS/DoraemonKit/Src/Core/Util/fishhook/doraemon_fishhook.c
浏览文件 @
feb8d6dc
...
...
@@ -97,35 +97,13 @@ static void doraemon_perform_rebinding_with_section(struct doraemon_rebindings_e
const
bool
isDataConst
=
strcmp
(
section
->
segname
,
"__DATA_CONST"
)
==
0
;
uint32_t
*
indirect_symbol_indices
=
indirect_symtab
+
section
->
reserved1
;
void
**
indirect_symbol_bindings
=
(
void
**
)((
uintptr_t
)
slide
+
section
->
addr
);
vm_prot_t
oldProtection
=
VM_PROT_NONE
;
vm_address_t
vmAddress
=
(
vm_address_t
)
indirect_symbol_bindings
;
// https://opensource.apple.com/source/xnu/xnu-7195.141.2/osfmk/vm/vm_user.c.auto.html
// OUT argument, but init with zero to eliminate `Variable 'vmSize' may be uninitialized when used here` warning
vm_size_t
vmSize
=
0
;
if
(
isDataConst
)
{
memory_object_name_t
object
;
#ifdef __LP64__
mach_msg_type_number_t
count
=
VM_REGION_BASIC_INFO_COUNT_64
;
vm_region_basic_info_data_64_t
vmRegionBasicInfoData
;
kern_return_t
kernelReturn
=
vm_region_64
(
mach_task_self
(),
&
vmAddress
,
&
vmSize
,
VM_REGION_BASIC_INFO_64
,
(
vm_region_info_t
)
&
vmRegionBasicInfoData
,
&
count
,
&
object
);
#else
mach_msg_type_number_t
count
=
VM_REGION_BASIC_INFO_COUNT
;
vm_region_basic_info_data_t
vmRegionBasicInfoData
;
kern_return_t
kernelReturn
=
vm_region
(
mach_task_self
(),
&
vmAddress
,
&
vmSize
,
VM_REGION_BASIC_INFO
,
(
vm_region_info_t
)
&
vmRegionBasicInfoData
,
&
count
,
object
);
#endif
if
(
__builtin_expect
(
kernelReturn
==
KERN_SUCCESS
,
true
))
{
oldProtection
=
vmRegionBasicInfoData
.
protection
;
}
else
{
assert
(
false
&&
"vm_region() failure."
);
return
;
}
kernelReturn
=
vm_protect
(
mach_task_self
(),
vmAddress
,
vmSize
,
false
,
oldProtection
|
VM_PROT_WRITE
);
if
(
__builtin_expect
(
kernelReturn
!=
KERN_SUCCESS
,
false
))
{
assert
(
false
&&
"vm_protect() failure."
);
kern_return_t
kernelReturn
=
vm_protect
(
mach_task_self
(),
(
vm_address_t
)
indirect_symbol_bindings
,
section
->
size
,
false
,
VM_PROT_READ
|
VM_PROT_WRITE
|
VM_PROT_COPY
);
if
(
__builtin_expect
(
kernelReturn
!=
KERN_SUCCESS
,
false
))
{
assert
(
false
&&
"vm_protect() failure."
);
return
;
}
return
;
}
}
for
(
uint
i
=
0
;
i
<
section
->
size
/
sizeof
(
void
*
);
i
++
)
{
uint32_t
symtab_index
=
indirect_symbol_indices
[
i
];
...
...
@@ -147,16 +125,13 @@ static void doraemon_perform_rebinding_with_section(struct doraemon_rebindings_e
}
indirect_symbol_bindings
[
i
]
=
cur
->
rebindings
[
j
].
replacement
;
goto
symbol_loop
;
}
}
cur
=
cur
->
next
;
}
symbol_loop:
;
}
if
(
isDataConst
)
{
kern_return_t
kernelReturn
=
vm_protect
(
mach_task_self
(),
vmAddress
,
vmSize
,
false
,
oldProtection
);
assert
(
kernelReturn
==
KERN_SUCCESS
&&
"vm_protect() failure."
);
}
}
static
void
doraemon_rebind_symbols_for_image
(
struct
doraemon_rebindings_entry
*
rebindings
,
...
...
iOS/Podfile.lock
浏览文件 @
feb8d6dc
...
...
@@ -14,9 +14,9 @@ PODS:
- AFNetworking/Serialization (4.0.1)
- AFNetworking/UIKit (4.0.1):
- AFNetworking/NSURLSession
- DoraemonKit (3.1.
0
):
- DoraemonKit/Core (= 3.1.
0
)
- DoraemonKit/Core (3.1.
0
):
- DoraemonKit (3.1.
2
):
- DoraemonKit/Core (= 3.1.
2
)
- DoraemonKit/Core (3.1.
2
):
- AFNetworking
- FMDB
- GCDWebServer
...
...
@@ -48,7 +48,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
DoraemonKit:
6db7868ed839ad6752c2e4ac074f958aab211af2
DoraemonKit:
0a040ae24386654e2a2d2c8d029f5ff5837de3c3
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录