【原创】内存指针基地址查询算法

首先针对所有有NP,GPK等保护引擎,CE貌似都会被干掉
所以这里写一篇关于自动查询内存基地址的伪代码算法,防止忘记。

DWORD  _begin = 0x40000000; //用于32位

DWORD _end = 0x7FFFFFFF;

DWORD _offset = 0;

DWORD _offsetDp = 0xff;

DWORD targetAddress = 0xBBBBB;

for( DWORD i = _begin; i <= _end;i++)

{

for( _offset = 0;k < _offsetDp;_offset++)

{

DWORD _address = readMemory(_begin + i);

DWORD _add2 = readMemory(_address + _offset);

if( targetAddress == _add2 || _address == targetAddress)

{

prinf("base:%x offset:%x",(_begin + i),_offset);

}

}

}

用于多级OFFSET的情况下只需要扩展递归的次数即可,需要详细编写算法,请勿使用多线程或锁可能会崩溃
错误请自行调优,尤其在其他语言的模式下 谢谢。

时间: 2024-07-30 19:34:01

【原创】内存指针基地址查询算法的相关文章

承诺c指针 (1)指针是地址

(1)是地址 首先明白一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下.变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = &foo; printf(" foo...%d\n", foo); printf("*foo_p...%d\n", *foo_p); printf(" &foo...%p\n", &foo); printf(" foo

操作系统原理(二)——内存管理之页面置换算法

页面置换算法 1. 总述 为提高内存利用率,解决内存供不应求的问题,更加合理的使用内存,人们创造了分页式内存抽象.同时有一个虚拟内存的概念,是指将内存中暂时不需要的部分写入硬盘,看上去硬盘扩展了内存的容量,所以叫做“虚拟”内存.使用虚拟内存,应用程序可以使用比实际物理内存更大的内存空间.可以认为这个更大的内存空间就在硬盘上,只有将某一部分需要被用到时,才被写入真实内存:当它暂时不再被用到时,又被写回硬盘.分页式内存管理将物理内存分为等大的小块,每块大小通常为1K.2K.4K等,称为页帧:逻辑内存

kernel32基地址获得学习笔记

原文:http://www.pediy.com/kssd/index.html -- 病毒技术 -- 病毒知识 -- Anti Virus专题 第一种方法 通过线程初始化时, 获得esp堆栈指针中的ExitThread函数的地址,然后通过搜索获得kernel32.dll的基地址. 线程在被初始化的时,其堆栈指针指向ExitThread函数的地址,windows这样做是为了通过ret返回时来调用ExitThread地址.所以一般我们可以在我们主线程的起始位置(也就是 程序入口点处)通过获得堆栈指针

C/C++ 错误笔记-如果要释放内存,必须拿到内存的首地址进行释放

例:修改字符串的第三个字母为a #include <stdlib.h> #include <string.h> #include <stdio.h> #pragma warning(disable:4996) void main() { char *p = (char *)malloc(100); strcpy(p,"123456789"); p = p + 2; *p = 'a'; free(p); system("pause"

指针的内容 &nbsp; 指针的地址 指针所指向的内容 指针的类型 指针所指向的类型

这几个个东东很具有迷惑性. int a=10;      //假设a的地址是 0x0000004C int *p;           //假设p的地址是 0x0035FA94 p=&a; 指针的内容:指针里面存放的是地址. 指针p里面存放的是a的地址(&a).即指针p里面存放的内容是0x0000004C. 指针的地址:指针本身的地址. 指针p的地址就是&p.指针p的地址是0x0035FA94 指针所指向的内容:也就是指针里面存放的地址,那块地址里面存放的内容,通过对指针进行*引用

VB.NET 内存指针和非托管内存的应用

介绍 Visual Basic 从来不像在C或C++里一样灵活的操纵指针和原始内存.然而利用.NET框架中的structures 和 classes,可以做许多类似的事情.它们包括 IntPtr,   Marshal 以及 GCHandle. 这些structures(结构) 和classes(类) 允许你在托管和非托管环境中进行交互.本文中将向您展示如何使用这些structures 和 classes 去完成指针和内存的操作. 关于 IntPtr 结构 IntPtr  结构的行为像一个整型指针

JavaScript中指针和地址理解

个人理解:指针只是指向内存的一个索引:而地址则是内存中确切的位置. 下面是函数中关于指针和地址一个小例子: function sum(num1,num2){ return num1+num2; } alert(sum(10,10)); //20 var anotherSum=sum; alert(anotherSum(10,10)); //20 sum=null; alert(anotherSum(10,10)); //20 注意:使用不带圆括号的函数的名是访问函数指针,而非调用函数,所以 su

娓娓道来c指针 (1)指针就是地址

(1)指针就是地址 首先明确一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下,变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = &foo; printf(" foo...%d\n", foo); printf("*foo_p...%d\n", *foo_p); printf(" &foo...%p\n", &foo); printf("

c语言指针,简单一句话指针就是地址

简单一句话,指针就是地址 0:网购的地址,通过这个地址找到你, 程序的地址,通过地址来操作变量,这个地址有一个叫法叫做指针,java 里面把地址就叫做引用 1:内存的单位是字节,例如一个256MB的机器,有256*1024*1024 字节的存储单位,每个字节都有一个对应的地址 通过该地址可以找到该块内存,就像我们的通讯地址一样 2:每一个变量由若干个字节组成,例如:int age = 20 由 4个字节组成,变量中第一个字节的地址称为变量的地址 #include <stdio.h> int m