当前位置: 首页>>代码示例>>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;未经允许,请勿转载。