Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
pubx
delve
提交
b065674f
D
delve
项目概览
pubx
/
delve
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
delve
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b065674f
编写于
2月 28, 2015
作者:
D
Derek Parker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Handle set_pc errors
上级
636719a4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
8 addition
and
6 deletion
+8
-6
proctl/registers_darwin_amd64.go
proctl/registers_darwin_amd64.go
+4
-1
proctl/threads_darwin.c
proctl/threads_darwin.c
+3
-4
proctl/threads_darwin.h
proctl/threads_darwin.h
+1
-1
未找到文件。
proctl/registers_darwin_amd64.go
浏览文件 @
b065674f
...
...
@@ -17,7 +17,10 @@ func (r *Regs) SP() uint64 {
}
func
(
r
*
Regs
)
SetPC
(
thread
*
ThreadContext
,
pc
uint64
)
error
{
C
.
set_pc
(
thread
.
os
.
thread_act
,
C
.
uint64_t
(
pc
))
kret
:=
C
.
set_pc
(
thread
.
os
.
thread_act
,
C
.
uint64_t
(
pc
))
if
kret
!=
C
.
KERN_SUCCESS
{
return
fmt
.
Errorf
(
"could not set pc"
)
}
return
nil
}
...
...
proctl/threads_darwin.c
浏览文件 @
b065674f
...
...
@@ -47,19 +47,18 @@ get_registers(mach_port_name_t task, x86_thread_state64_t *state) {
}
// TODO(dp) this should return kret instead of void
void
kern_return_t
set_pc
(
thread_act_t
task
,
uint64_t
pc
)
{
kern_return_t
kret
;
x86_thread_state64_t
state
;
mach_msg_type_number_t
stateCount
=
x86_THREAD_STATE64_COUNT
;
kret
=
thread_get_state
(
task
,
x86_THREAD_STATE64
,
(
thread_state_t
)
&
state
,
&
stateCount
);
if
(
kret
!=
KERN_SUCCESS
)
puts
(
mach_error_string
(
kret
))
;
if
(
kret
!=
KERN_SUCCESS
)
return
kret
;
state
.
__rip
=
pc
;
kret
=
thread_set_state
(
task
,
x86_THREAD_STATE64
,
(
thread_state_t
)
&
state
,
stateCount
);
if
(
kret
!=
KERN_SUCCESS
)
puts
(
mach_error_string
(
kret
));
// TODO(dp) - possible memory leak - vm_deallocate state
return
thread_set_state
(
task
,
x86_THREAD_STATE64
,
(
thread_state_t
)
&
state
,
stateCount
);
}
// TODO(dp) this should return kret instead of void
...
...
proctl/threads_darwin.h
浏览文件 @
b065674f
...
...
@@ -13,7 +13,7 @@ read_memory(mach_port_name_t, mach_vm_address_t, void *, mach_msg_type_number_t)
kern_return_t
get_registers
(
mach_port_name_t
,
x86_thread_state64_t
*
);
void
kern_return_t
set_pc
(
thread_act_t
,
uint64_t
);
void
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录