當前位置: 首頁>>代碼示例>>Golang>>正文


Golang Usercorn.Mappings方法代碼示例

本文整理匯總了Golang中github.com/lunixbochs/usercorn/go/models.Usercorn.Mappings方法的典型用法代碼示例。如果您正苦於以下問題:Golang Usercorn.Mappings方法的具體用法?Golang Usercorn.Mappings怎麽用?Golang Usercorn.Mappings使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在github.com/lunixbochs/usercorn/go/models.Usercorn的用法示例。


在下文中一共展示了Usercorn.Mappings方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: traceMem

func (p *memImage) traceMem(u models.Usercorn, addr uint64, data []byte) {
	if len(data) > p.blockSize {
		firstLen := (addr+uint64(p.blockSize)-1) & ^uint64(p.blockSize-1) - addr
		if firstLen > 0 {
			p.traceMem(u, addr, data[:firstLen])
		}
		for i := firstLen; i < uint64(len(data)); i += uint64(p.blockSize) {
			p.traceMem(u, addr+uint64(i), data[i:i+uint64(p.blockSize)])
		}
		return
	}

	i, m, had := p.find(addr)
	if !had {
		aligned := addr & ^uint64(p.blockSize-1)
		r := &region{
			Addr: aligned,
			Size: uint64(p.blockSize),
			Data: make([]byte, p.blockSize),
		}
		for _, v := range u.Mappings() {
			if v.Contains(addr) {
				r.Desc = v.Desc
				r.Prot = v.Prot
				if v.File != nil {
					r.Filename = v.File.Name
				}
				break
			}
		}
		p.maps = append(p.maps, r)
		sort.Sort(RegionAddrSort(p.maps))

		i, m, _ = p.find(addr)
		p.resize()
	}
	off := (addr - m.Addr)
	dst := m.Data[off:]
	for i, v := range data {
		if (dst[i] == 0) != (v == 0) {
			if v != 0 {
				m.ByteCount++
			} else {
				m.ByteCount--
			}
		}
		dst[i] = v
	}
	if m.ByteCount == 0 {
		p.maps = append(p.maps[:i], p.maps[i+1:]...)
		p.resize()
	}
}
開發者ID:lunixbochs,項目名稱:usercorn,代碼行數:53,代碼來源:mem_image.go


注:本文中的github.com/lunixbochs/usercorn/go/models.Usercorn.Mappings方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。