-//
-// Searching.m
-// The Cheat
-//
-// Created by Chaz McGarvey on 12/28/04.
-// Copyright 2004 Chaz McGarvey. All rights reserved.
-//
+
+// **********************************************************************
+// The Cheat - A universal game cheater for Mac OS X
+// (C) 2003-2005 Chaz McGarvey (BrokenZipper)
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 1, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+
#import "Searching.h"
context->lastRegion = VMMakeRegion( context->process, *(context->lastRegionPtr), 0 );
region = VMNextRegionWithAttributes( context->process, context->lastRegion, VMREGION_READABLE | VMREGION_WRITABLE );
if ( VMRegionIsNotNull( region ) ) {
-
if ( context->bufferSize < VMRegionSize( region ) ) {
char *buf = realloc( context->buffer, VMRegionSize( region ) );
if ( buf ) {
top = *context->lastPerRegionPtr;
for ( i = 0; i < top; i++ ) {
-
ptr = context->buffer + *context->lastAddressPtr - VMRegionAddress(region);
- if ( context->compareFunc(ptr,context->value->_value) ) {
+
+ if (ptr >= context->buffer && context->compareFunc(ptr,context->value->_value)) {
if ( context->numberOfResults >= TCArrayElementCount(context->addresses) ) {
TCArrayResize( context->addresses, TCArrayElementCount(context->addresses) + TC_BUFFER_SIZE / sizeof(TCAddress) );
context->addressPtr = (TCAddress *)TCArrayBytes(context->addresses) + context->numberOfResults;
for ( i = 0; i < top; i++ ) {
ptr = context->buffer + *context->lastAddressPtr - VMRegionAddress(region);
- if ( context->compareFunc(ptr,context->lastValuePtr) ) {
+ if ( ptr >= context->buffer && context->compareFunc(ptr,context->lastValuePtr) ) {
if ( context->numberOfResults >= TCArrayElementCount(context->addresses) ) {
TCArrayResize( context->addresses, TCArrayElementCount(context->addresses) + TC_BUFFER_SIZE / sizeof(TCAddress) );
context->addressPtr = (TCAddress *)TCArrayBytes(context->addresses) + context->numberOfResults;
for ( i = 0; i < top; i++ ) {
ptr = context->buffer + *context->lastAddressPtr - VMRegionAddress(region);
- if ( memcmp( ptr, context->value->_value, MIN(TCArrayElementSize(context->values),context->buffer+VMRegionAddress(region)-ptr) ) == 0 ) {
+
+ if ( ptr >= context->buffer && memcmp( ptr, context->value->_value, MIN(TCArrayElementSize(context->values),context->buffer+VMRegionAddress(region)-ptr) ) == 0 ) {
if ( context->numberOfResults >= TCArrayElementCount(context->addresses) ) {
TCArrayResize( context->addresses, TCArrayElementCount(context->addresses) + TC_BUFFER_SIZE / sizeof(TCAddress) );
context->addressPtr = (TCAddress *)TCArrayBytes(context->addresses) + context->numberOfResults;
for ( i = 0; i < top; i++ ) {
ptr = context->buffer + *context->lastAddressPtr - VMRegionAddress(region);
- if ( memcmp( ptr, context->lastValuePtr, MIN(TCArrayElementSize(context->values),context->buffer+VMRegionAddress(region)-ptr) ) == 0 ) {
+ if ( ptr >= context->buffer && memcmp( ptr, context->lastValuePtr, MIN(TCArrayElementSize(context->values),context->buffer+VMRegionAddress(region)-ptr) ) == 0 ) {
if ( context->numberOfResults >= TCArrayElementCount(context->addresses) ) {
TCArrayResize( context->addresses, TCArrayElementCount(context->addresses) + TC_BUFFER_SIZE / sizeof(TCAddress) );
context->addressPtr = (TCAddress *)TCArrayBytes(context->addresses) + context->numberOfResults;