collect rebase symbols
This commit is contained in:
parent
9b2796b2a1
commit
04979b0afd
@ -27,6 +27,9 @@ type ImportSymbol struct {
|
||||
file_address uint64
|
||||
lib_ordinal uint32
|
||||
|
||||
target uint32
|
||||
high8 uint32
|
||||
|
||||
// push number
|
||||
pnum uint32
|
||||
stub uint64
|
||||
@ -122,8 +125,9 @@ func (mc *MachoContext) CollectBindSymbolsModern() []*ImportSymbol {
|
||||
if status == 3 {
|
||||
continue
|
||||
}
|
||||
// fmt.Printf("segment=%x format=%x page_count=%d\n", fix.segment, fix.format, fix.page_count)
|
||||
// fmt.Printf("pages=%x\n", fix.pages)
|
||||
|
||||
fmt.Printf("segment=%x format=%x page_count=%d\n", fix.segment, fix.format, fix.page_count)
|
||||
|
||||
pages := ([]C.ushort)(unsafe.Slice(fix.pages, fix.page_count))
|
||||
reader := bytes.NewReader(mc.buf)
|
||||
for page_i := 0; page_i < int(fix.page_count); page_i++ {
|
||||
@ -132,6 +136,8 @@ func (mc *MachoContext) CollectBindSymbolsModern() []*ImportSymbol {
|
||||
address := int64(fix.segment) + int64(page_i) * int64(fix.page_size) + int64(pages[page_i])
|
||||
reader.Seek(address, io.SeekStart)
|
||||
|
||||
fmt.Printf(" page %d offset=%x\n", page_i, address)
|
||||
|
||||
code := make([]byte, 8)
|
||||
|
||||
for {
|
||||
@ -141,6 +147,10 @@ func (mc *MachoContext) CollectBindSymbolsModern() []*ImportSymbol {
|
||||
var bind C.int
|
||||
var ret1 C.ulonglong
|
||||
var ret2 C.ulonglong
|
||||
if (fix.format != 2 && fix.format != 6) {
|
||||
fmt.Printf("format is %d\n", fix.format)
|
||||
}
|
||||
|
||||
next := C.ParseFixValue(C.int(fix.format), C.ulonglong(v),
|
||||
&bind, &ret1, &ret2)
|
||||
|
||||
@ -164,6 +174,14 @@ func (mc *MachoContext) CollectBindSymbolsModern() []*ImportSymbol {
|
||||
syms = append(syms, &new_sym)
|
||||
} else {
|
||||
fmt.Printf("// 0x%x rebase=%d target=0x%x high8=0x%x\n", address, bind, ret1, ret2)
|
||||
sym.typ = "rebase"
|
||||
sym.target = uint32(ret1)
|
||||
sym.high8 = uint32(ret2)
|
||||
sym.segment = uint32(mc.findSegmentIndexAt(uint64(address)))
|
||||
sym.file_address = uint64(address)
|
||||
sym.next = int(next)
|
||||
new_sym := sym
|
||||
syms = append(syms, &new_sym)
|
||||
}
|
||||
|
||||
if int(next) == 0 {
|
||||
@ -176,6 +194,7 @@ func (mc *MachoContext) CollectBindSymbolsModern() []*ImportSymbol {
|
||||
reader.Seek(0, io.SeekStart)
|
||||
}
|
||||
}
|
||||
fmt.Printf("number of imports %d\n", len(syms))
|
||||
return syms
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user