Hey everyone!
I just wanted to let you know that I've recently started diving back into in-memory hacking in NosTale. I'm patiently recreating the game's internal structures from scratch to gain a deeper understanding of its inner workings.
In-memory hacking requires a lot of patience and dedication, but it's incredibly fascinating and rewarding. I'm working hard to comprehend the data structures used within the game and finding safe ways to access pointers to items in the lists without encountering crashes or invalid memory access issues.
I would love to hear your advice and suggestions on safely accessing pointers to objects in the lists without crashing or encountering invalid memory issues. If you have any techniques or best practices to share, I'm all ears!
Right now I'm looping around lists like in this code snippet:
but nevertheless, sometimes it takes 5 minutes to crash, sometimes 1, I guess it access the memory of an item deleted right after it checker for the list length.
Thank you in advance!
I just wanted to let you know that I've recently started diving back into in-memory hacking in NosTale. I'm patiently recreating the game's internal structures from scratch to gain a deeper understanding of its inner workings.
In-memory hacking requires a lot of patience and dedication, but it's incredibly fascinating and rewarding. I'm working hard to comprehend the data structures used within the game and finding safe ways to access pointers to items in the lists without encountering crashes or invalid memory access issues.
I would love to hear your advice and suggestions on safely accessing pointers to objects in the lists without crashing or encountering invalid memory issues. If you have any techniques or best practices to share, I'm all ears!
Right now I'm looping around lists like in this code snippet:
Code:
static bool IsPointerValid(const void* ptr)
{
MEMORY_BASIC_INFORMATION mbi;
SIZE_T result = VirtualQuery(ptr, &mbi, sizeof(mbi));
return (result != 0 && mbi.Protect != PAGE_NOACCESS);
}
...
for (int i = 0; i < sceneMgr->NpcListPointer->Length; i++) {
auto itemPtr = (MapNpcObj*)(sceneMgr->NpcListPointer)->FirstItemPtr[i];
if(IsPointerValid(itemPtr) && IsPointerValid(itemPtr->NpcName))
std::cout << std::dec << itemPtr->NpcName << " " << itemPtr->MapX << ";" << itemPtr->MapY << std::endl;
}
Thank you in advance!