首页
社区
课程
招聘
[求助]怎么知道数据在内存中的地址啊??
发表于: 2006-2-24 10:27 6495

[求助]怎么知道数据在内存中的地址啊??

2006-2-24 10:27
6495

刚学汇编。WIN32汇编中,在打开一个进程以后,我用ReadProcessMemory()读取该进程的内存数据,我还想得到这些数据在内存中的地址,应该怎么做呢?
谢谢!!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
ReadProcessMemory的参数中不是有一个lpBaseAddress吗?不知道地址怎么访问数据呢?
如果要得到数据在物理内存中的地址, Windows内核中倒是有有一个函数(MmGetPhysicalAddress), 可是Win32应用程序是无法调用这个函数的, 估计ntdll.dll中应该有函数可以实现这个功能, 可惜我见识有限, 不知道要用哪个函数
2006-2-24 10:43
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 thebutterfly 发布
ReadProcessMemory的参数中不是有一个lpBaseAddress吗?不知道地址怎么访问数据呢?
如果要得到数据在物理内存中的地址, Windows内核中倒是有有一个函数(MmGetPhysicalAddress), 可是Win32应用程序是无法调用这个函数的, 估计ntdll.dll中应该有函数可以实现这个功能, 可惜我见识有限, 不知道要用哪个函数


ReadProcessMemory的参数中的lpBaseAddress只是开始读取的地址,我想做的是在我所读取的众多数据中找到我所需要的那个数据,然后查出它在内存中的地址。想问下二楼,象 00401000这样的地址是虚拟地址吧,数据在物理内存中的地址应该是跟它形式一样的,是吗??
2006-2-24 10:55
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
你把数据读入缓冲区之后查找到所需数据, 把它的偏移加上起始虚拟地址就是那个数据的虚拟地址
虚拟地址和数据在物理内存中的地址是不尽相同的, 虚拟地址要通过一系列转换才得到物理地址
2006-2-24 11:06
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
读读intel的说明,弄清除页表的内容,然后经过简单的计算就可以得到物理内存的地址,但一般是不需要理解这些内容的,你只要知道虚地址就可以操作了,除非某些特殊的用途,例如反Debug跟踪等目的,才需要了解这些内容,例如 Themida的驱动就是利用页表的标志位来判断是否有debug跟踪的。并直接修改页表的标志位或直接释放物理页面来达到反跟踪的目的。
2006-2-24 17:46
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我查了一下WIN32API说明,VirtualQueryEx函数应该是查询内存页面的,不过不怎么看得懂函数的用法,哪位可以详细讲解一下吗??谢谢
DWORD VirtualQueryEx(

    HANDLE hProcess,        // handle of process
    LPCVOID lpAddress,        // address of region
    PMEMORY_BASIC_INFORMATION lpBuffer,        // address of information buffer  
    DWORD dwLength         // size of buffer
   );
还有这个PMEMORY_BASIC_INFORMATION 结构:
typedef struct _MEMORY_BASIC_INFORMATION { // mbi  
    PVOID BaseAddress;            // base address of region
    PVOID AllocationBase;         // allocation base address
    DWORD AllocationProtect;      // initial access protection
    DWORD RegionSize;             // size, in bytes, of region
    DWORD State;                  // committed, reserved, free
    DWORD Protect;                // current access protection
    DWORD Type;                   // type of pages

} MEMORY_BASIC_INFORMATION;
typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION;
2006-2-24 18:33
0
游客
登录 | 注册 方可回帖
返回
//