When I 1st made my algorithm I got every possible address, that I rectified by comparing the right data (dunno why but I had originally set it to compare against next node and somehow both where 0), now however I don't get any results, I know for sure it enters the while loop at bottom of proc_aobscan but haven't been able to get even one result out of it.

Gotta head to work soon so just posting my code here in the hopes someone will figure out what I'm doing wrong before I get a chance to debug it tonight
Code:
define PAGE_LINE_SIZE (((sizeof(void*) * 2) * CHAR_BIT) + 7)

intptr_t proc_intptr_next( int *err, proc_handle_t *handle, intptr_t addr, intptr_t *size ) {
	char line[PAGE_LINE_SIZE] = {0};
	intptr_t from = 0, upto = 0;
	if ( !size ) {
		if ( err ) *err = EDESTADDRREQ;
		return -1;
	}
	*size = -1;
	if ( !handle ) {
		if ( err ) *err = EINVAL;
		return -1;
	}
#ifdef _LARGEFILE64_SOURCE
	lseek64( handle->pagesFd, 0, SEEK_SET );
#else
	lseek( handle->pagesFd, 0, SEEK_SET );
#endif
	next_page:
	if ( read( handle->pagesFd, line, PAGE_LINE_SIZE )
		!= PAGE_LINE_SIZE ) {
		if ( err ) *err = errno;
		return -1;
	}
	line[PAGE_LINE_SIZE-1] = 0;
	sscanf( line, "%p-%p", (void**)(&from), (void**)(&upto) );
	if ( addr >= upto ) {
		while ( read( handle->pagesFd, line, 1 ) != 1 ) {
			if ( line[0] == '\n' )
				goto next_page;
		}
		if ( err ) *err = errno;
		return -1;
	}
	*size = upto - from;
	return from;
}

node_t proc_aobscan(
	int *err, int into,
	proc_handle_t *handle,
	uchar *array, intptr_t bytes,
	intptr_t from, intptr_t upto ) {
	node_t count = 0;
	uchar buff[BUFSIZ*2] = {0}, *i, *next;
	intptr_t done, addr, size, stop;
	errno = EXIT_SUCCESS;
	if ( into < 0 ) {
		if ( err ) *err = EDESTADDRREQ;
		return 0;
	}
	if ( !handle || !array || bytes <= 0 ) {
		if ( err ) *err = EINVAL;
		return 0;
	}
	if ( (addr = proc_intptr_next( err, handle, from, &size )) < 0 )
		return 0;
	stop = addr + size;
	if ( addr >= upto ) {
		if ( err ) *err = EXIT_SUCCESS;
		return 0;
	}
	if ( from < addr ) from = addr;
#ifdef _LARGEFILE64_SOURCE
	if ( lseek64( handle->rdMemFd, from, SEEK_SET ) < 0 ) {
		if ( err ) *err = errno;
		return 0;
	}
	if ( lseek64( into, 0, SEEK_SET ) < 0 ) {
		if ( err ) *err = errno;
		return 0;
	}
#else
	if ( lseek( handle->rdMemFd, from, SEEK_SET ) < 0 ) {
		if ( err ) *err = errno;
		return 0;
	}
	if ( lseek( into, 0, SEEK_SET ) < 0 ) {
		if ( err ) *err = errno;
		return 0;
	}
#endif
	done = stop - from;
	if ( done >= BUFSIZ ) done = BUFSIZ;
	if ( (done = read( handle->rdMemFd, buff, done )) <= 0 ) {
		if ( err ) *err = errno;
		return 0;
	}
	next = buff + done;
	while ( (from + bytes) < upto ) {
		if ( done == BUFSIZ ) {
			done = stop - from;
			if ( done >= BUFSIZ ) done = BUFSIZ;
			if ( (done =
				read( handle->rdMemFd, buff + BUFSIZ, done )) <= 0) {
				if ( err ) *err = errno;
				return count;
			}
		}
		for ( i = buff; i < next; ++i, ++from ) {
			if ( memcmp( i, array, bytes ) == 0 ) {
				if ( write( into, &from, sizeof(from) ) != sizeof(from) ) {
					if ( err ) *err = errno;
					return count;
				}
				++count;
			}
		}
		(void)memmove( buff, buff + BUFSIZ, BUFSIZ );
		(void)memset( buff + BUFSIZ, 0, BUFSIZ );
		next = buff + done;
		if ( from >= stop ) {
			if ( (addr = proc_intptr_next(
				err, handle, from, &size )) < 0 )
				return count;
			if ( addr >= upto ) {
				if ( err ) *err = EXIT_SUCCESS;
				return count;
			}
			stop = addr + size;
			if ( from < addr ) from = addr;
		}
	}
	if ( err ) *err = EXIT_SUCCESS;
	return count;
}
And for full file/project:
gasp.zip - Google Drive