Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
pubx
delve
提交
2de4930a
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,体验更适合开发者的 AI 搜索 >>
提交
2de4930a
编写于
8月 07, 2019
作者:
D
Derek Parker
提交者:
Alessandro Arzilli
8月 09, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
pkg/proc: Avoid passing BinaryInfo when not needed
This is going towards untangling proc in order to clean it up.
上级
a3d530bb
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
21 addition
and
13 deletion
+21
-13
pkg/proc/arch.go
pkg/proc/arch.go
+12
-7
pkg/proc/bininfo.go
pkg/proc/bininfo.go
+2
-2
pkg/proc/dwarf_expr_test.go
pkg/proc/dwarf_expr_test.go
+2
-1
pkg/proc/stack.go
pkg/proc/stack.go
+5
-3
未找到文件。
pkg/proc/arch.go
浏览文件 @
2de4930a
...
...
@@ -15,9 +15,9 @@ type Arch interface {
BreakpointInstruction
()
[]
byte
BreakpointSize
()
int
DerefTLS
()
bool
FixFrameUnwindContext
(
fctxt
*
frame
.
FrameContext
,
pc
uint64
,
bi
*
BinaryInfo
)
*
frame
.
FrameContext
FixFrameUnwindContext
(
*
frame
.
FrameContext
,
uint64
,
*
BinaryInfo
)
*
frame
.
FrameContext
RegSize
(
uint64
)
int
RegistersToDwarfRegisters
(
bi
*
BinaryInfo
,
regs
Registers
)
op
.
DwarfRegisters
RegistersToDwarfRegisters
(
uint64
,
Registers
)
op
.
DwarfRegisters
GoroutineToDwarfRegisters
(
*
G
)
op
.
DwarfRegisters
}
...
...
@@ -261,7 +261,7 @@ func maxAmd64DwarfRegister() int {
// RegistersToDwarfRegisters converts hardware registers to the format used
// by the DWARF expression interpreter.
func
(
a
*
AMD64
)
RegistersToDwarfRegisters
(
bi
*
BinaryInfo
,
regs
Registers
)
op
.
DwarfRegisters
{
func
(
a
*
AMD64
)
RegistersToDwarfRegisters
(
staticBase
uint64
,
regs
Registers
)
op
.
DwarfRegisters
{
dregs
:=
make
([]
*
op
.
DwarfRegister
,
maxAmd64DwarfRegister
()
+
1
)
dregs
[
amd64DwarfIPRegNum
]
=
op
.
DwarfRegisterFromUint64
(
regs
.
PC
())
...
...
@@ -283,9 +283,14 @@ func (a *AMD64) RegistersToDwarfRegisters(bi *BinaryInfo, regs Registers) op.Dwa
}
}
so
:=
bi
.
pcToImage
(
regs
.
PC
())
return
op
.
DwarfRegisters
{
StaticBase
:
so
.
StaticBase
,
Regs
:
dregs
,
ByteOrder
:
binary
.
LittleEndian
,
PCRegNum
:
amd64DwarfIPRegNum
,
SPRegNum
:
amd64DwarfSPRegNum
,
BPRegNum
:
amd64DwarfBPRegNum
}
return
op
.
DwarfRegisters
{
StaticBase
:
staticBase
,
Regs
:
dregs
,
ByteOrder
:
binary
.
LittleEndian
,
PCRegNum
:
amd64DwarfIPRegNum
,
SPRegNum
:
amd64DwarfSPRegNum
,
BPRegNum
:
amd64DwarfBPRegNum
,
}
}
// GoroutineToDwarfRegisters extract the saved DWARF registers from a parked
...
...
@@ -296,7 +301,7 @@ func (a *AMD64) GoroutineToDwarfRegisters(g *G) op.DwarfRegisters {
dregs
[
amd64DwarfSPRegNum
]
=
op
.
DwarfRegisterFromUint64
(
g
.
SP
)
dregs
[
amd64DwarfBPRegNum
]
=
op
.
DwarfRegisterFromUint64
(
g
.
BP
)
so
:=
g
.
variable
.
bi
.
pc
ToImage
(
g
.
PC
)
so
:=
g
.
variable
.
bi
.
PC
ToImage
(
g
.
PC
)
return
op
.
DwarfRegisters
{
StaticBase
:
so
.
StaticBase
,
Regs
:
dregs
,
ByteOrder
:
binary
.
LittleEndian
,
PCRegNum
:
amd64DwarfIPRegNum
,
SPRegNum
:
amd64DwarfSPRegNum
,
BPRegNum
:
amd64DwarfBPRegNum
}
}
pkg/proc/bininfo.go
浏览文件 @
2de4930a
...
...
@@ -435,8 +435,8 @@ func (bi *BinaryInfo) PCToFunc(pc uint64) *Function {
return
nil
}
//
pc
ToImage returns the image containing the given PC address.
func
(
bi
*
BinaryInfo
)
pc
ToImage
(
pc
uint64
)
*
Image
{
//
PC
ToImage returns the image containing the given PC address.
func
(
bi
*
BinaryInfo
)
PC
ToImage
(
pc
uint64
)
*
Image
{
fn
:=
bi
.
PCToFunc
(
pc
)
return
bi
.
funcToImage
(
fn
)
}
...
...
pkg/proc/dwarf_expr_test.go
浏览文件 @
2de4930a
...
...
@@ -90,7 +90,8 @@ func dwarfExprCheck(t *testing.T, mem proc.MemoryReadWriter, regs op.DwarfRegist
func
dwarfRegisters
(
bi
*
proc
.
BinaryInfo
,
regs
*
linutil
.
AMD64Registers
)
op
.
DwarfRegisters
{
a
:=
proc
.
AMD64Arch
(
"linux"
)
dwarfRegs
:=
a
.
RegistersToDwarfRegisters
(
bi
,
regs
)
so
:=
bi
.
PCToImage
(
regs
.
PC
())
dwarfRegs
:=
a
.
RegistersToDwarfRegisters
(
so
.
StaticBase
,
regs
)
dwarfRegs
.
CFA
=
defaultCFA
dwarfRegs
.
FrameBase
=
defaultCFA
return
dwarfRegs
...
...
pkg/proc/stack.go
浏览文件 @
2de4930a
...
...
@@ -100,7 +100,8 @@ func ThreadStacktrace(thread Thread, depth int) ([]Stackframe, error) {
if
err
!=
nil
{
return
nil
,
err
}
it
:=
newStackIterator
(
thread
.
BinInfo
(),
thread
,
thread
.
BinInfo
()
.
Arch
.
RegistersToDwarfRegisters
(
thread
.
BinInfo
(),
regs
),
0
,
nil
,
-
1
,
nil
)
so
:=
thread
.
BinInfo
()
.
PCToImage
(
regs
.
PC
())
it
:=
newStackIterator
(
thread
.
BinInfo
(),
thread
,
thread
.
BinInfo
()
.
Arch
.
RegistersToDwarfRegisters
(
so
.
StaticBase
,
regs
),
0
,
nil
,
-
1
,
nil
)
return
it
.
stacktrace
(
depth
)
}
return
g
.
Stacktrace
(
depth
,
false
)
...
...
@@ -117,7 +118,8 @@ func (g *G) stackIterator() (*stackIterator, error) {
if
err
!=
nil
{
return
nil
,
err
}
return
newStackIterator
(
g
.
variable
.
bi
,
g
.
Thread
,
g
.
variable
.
bi
.
Arch
.
RegistersToDwarfRegisters
(
g
.
variable
.
bi
,
regs
),
g
.
stackhi
,
stkbar
,
g
.
stkbarPos
,
g
),
nil
so
:=
g
.
variable
.
bi
.
PCToImage
(
regs
.
PC
())
return
newStackIterator
(
g
.
variable
.
bi
,
g
.
Thread
,
g
.
variable
.
bi
.
Arch
.
RegistersToDwarfRegisters
(
so
.
StaticBase
,
regs
),
g
.
stackhi
,
stkbar
,
g
.
stkbarPos
,
g
),
nil
}
return
newStackIterator
(
g
.
variable
.
bi
,
g
.
variable
.
mem
,
g
.
variable
.
bi
.
Arch
.
GoroutineToDwarfRegisters
(
g
),
g
.
stackhi
,
stkbar
,
g
.
stkbarPos
,
g
),
nil
}
...
...
@@ -517,7 +519,7 @@ func (it *stackIterator) advanceRegs() (callFrameRegs op.DwarfRegisters, ret uin
}
it
.
regs
.
CFA
=
int64
(
cfareg
.
Uint64Val
)
callimage
:=
it
.
bi
.
pc
ToImage
(
it
.
pc
)
callimage
:=
it
.
bi
.
PC
ToImage
(
it
.
pc
)
callFrameRegs
=
op
.
DwarfRegisters
{
StaticBase
:
callimage
.
StaticBase
,
ByteOrder
:
it
.
regs
.
ByteOrder
,
PCRegNum
:
it
.
regs
.
PCRegNum
,
SPRegNum
:
it
.
regs
.
SPRegNum
,
BPRegNum
:
it
.
regs
.
BPRegNum
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录