# Path: haystack/allocators/win32/win7heapwalker.py
# class Win7HeapWalker(winheapwalker.WinHeapWalker):
# class Win7HeapFinder(winheapwalker.WinHeapFinder):
#     def _create_validator(self):
#     def _validator_type(self):
#     def _walker_type(self):
#     def _make_dual_arch_ctypes(self):
#     def _get_heap_possible_kernel_pointer_from_heap(self, target_platform, heap):
# 
# Path: haystack/mappings/folder.py
# MMAP_HACK_ACTIVE = True
# MAX_MAPPING_SIZE_FOR_MMAP = 1024 * 1024 * 20
# class LazyLoadingException(Exception):
# class MemoryDumpLoader(interfaces.IMemoryLoader):
# class ProcessMemoryDumpLoader(MemoryDumpLoader):
# class LazyProcessMemoryDumpLoader(ProcessMemoryDumpLoader):
# class VeryLazyProcessMemoryDumpLoader(LazyProcessMemoryDumpLoader):
# class FolderLoader(interfaces.IMemoryLoader):
#     def __init__(self, filename):
#     def __init__(self, dumpname, bits=None, os_name=None):
#     def make_memory_handler(self):
#     def _is_valid(self):
#     def _load_mappings(self):
#     def _is_valid(self):
#     def _test_dir(self):
#     def _protected_open_file(self, mmap_fname, mmap_pathname):
#     def _load_mappings(self):
#     def _load_metadata(self):
#     def _load_memory_mappings(self):
#     def __init__(self, dumpname, maps_to_load=None, bits=None, os_name=None):
#     def _protected_open_file(self, mmap_fname, mmap_pathname):
#     def _load_memory_mappings(self):
# def load(dumpname, bits=None, os_name=None):
#     def __init__(self, opts):
#     def make_memory_handler(self):


import logging
import sys
import unittest
from haystack.allocators.win32 import win7heapwalker
from haystack.mappings import folder
from test.testfiles import putty_1_win7
                    # len(m), lastend-lasts,lastend,lasts, addr, addr+s, s) )
                    addsize += s
                # keep last big chunk on the stack before moving to next one.
                else:
                    if addsize != 0:
                        #log.debug('previous fth_chunks cumulated to %d lasts:%d'%(addsize, lasts))
                        addsize = 0
                    lastend = addr + s
                    lasts = s
        # so chunks are englobing fth_chunks
        # _heap.ProcessHeapsListIndex give the order of heaps....
        return

    def test_search(self):
        """    Testing the loading of _HEAP in each memory mapping.
        Compare load_members results with known offsets. expect failures otherwise. """
        finder = win7heapwalker.Win7HeapFinder(self._memory_handler)

        found = []
        for heap_walker in finder.list_heap_walkers():
            validator = heap_walker.get_heap_validator()
            addr = heap_walker.get_heap_address()
            heap = heap_walker.get_heap()
            if addr in map(lambda x: x[0], putty_1_win7.known_heaps):
                self.assertTrue(
                    validator.load_members( heap, 50),
                    "We expected a valid hit at @ 0x%0.8x" %
                    (addr))
                found.append(addr, )
            else:

# Path: haystack/allocators/win32/win7heapwalker.py
# class Win7HeapWalker(winheapwalker.WinHeapWalker):
# class Win7HeapFinder(winheapwalker.WinHeapFinder):
#     def _create_validator(self):
#     def _validator_type(self):
#     def _walker_type(self):
#     def _make_dual_arch_ctypes(self):
#     def _get_heap_possible_kernel_pointer_from_heap(self, target_platform, heap):
# 
# Path: haystack/mappings/folder.py
# MMAP_HACK_ACTIVE = True
# MAX_MAPPING_SIZE_FOR_MMAP = 1024 * 1024 * 20
# class LazyLoadingException(Exception):
# class MemoryDumpLoader(interfaces.IMemoryLoader):
# class ProcessMemoryDumpLoader(MemoryDumpLoader):
# class LazyProcessMemoryDumpLoader(ProcessMemoryDumpLoader):
# class VeryLazyProcessMemoryDumpLoader(LazyProcessMemoryDumpLoader):
# class FolderLoader(interfaces.IMemoryLoader):
#     def __init__(self, filename):
#     def __init__(self, dumpname, bits=None, os_name=None):
#     def make_memory_handler(self):
#     def _is_valid(self):
#     def _load_mappings(self):
#     def _is_valid(self):
#     def _test_dir(self):
#     def _protected_open_file(self, mmap_fname, mmap_pathname):
#     def _load_mappings(self):
#     def _load_metadata(self):
#     def _load_memory_mappings(self):
#     def __init__(self, dumpname, maps_to_load=None, bits=None, os_name=None):
#     def _protected_open_file(self, mmap_fname, mmap_pathname):
#     def _load_memory_mappings(self):
# def load(dumpname, bits=None, os_name=None):
#     def __init__(self, opts):
#     def make_memory_handler(self):


# Path: test/haystack/allocators/win32/test_win7walker.py
import logging
import sys
import unittest
from haystack.allocators.win32 import win7heapwalker
from haystack.mappings import folder
from test.testfiles import putty_1_win7

                    # len(m), lastend-lasts,lastend,lasts, addr, addr+s, s) )
                    addsize += s
                # keep last big chunk on the stack before moving to next one.
                else:
                    if addsize != 0:
                        #log.debug('previous fth_chunks cumulated to %d lasts:%d'%(addsize, lasts))
                        addsize = 0
                    lastend = addr + s
                    lasts = s
        # so chunks are englobing fth_chunks
        # _heap.ProcessHeapsListIndex give the order of heaps....
        return

    def test_search(self):
        """    Testing the loading of _HEAP in each memory mapping.
        Compare load_members results with known offsets. expect failures otherwise. """
        finder = win7heapwalker.Win7HeapFinder(self._memory_handler)

        found = []
        for heap_walker in finder.list_heap_walkers():
            validator = heap_walker.get_heap_validator()
            addr = heap_walker.get_heap_address()
            heap = heap_walker.get_heap()
            if addr in map(lambda x: x[0], putty_1_win7.known_heaps):
                self.assertTrue(
                    validator.load_members( heap, 50),
                    "We expected a valid hit at @ 0x%0.8x" %
                    (addr))
                found.append(addr, )
            else:

                try: