如何获取物理内存大小地址

java 如何获得java对象的内存地址 - 为程序员服务
为程序员服务
如何获得java对象的内存地址
在java中内存中的对象地址是可变的,所以获得的内存地址有可能会变化。要获得内存地址也只能通过Unsafe的方法来获得,如下代码片段:
package cn.outofmemory.
import java.lang.reflect.F
import sun.misc.U
public class Addresser
private static U
Field field = Unsafe.class.getDeclaredField(&theUnsafe&);
field.setAccessible(true);
unsafe = (Unsafe)field.get(null);
catch (Exception e)
e.printStackTrace();
public static long addressOf(Object o)
throws Exception
Object[] array = new Object[] {o};
long baseOffset = unsafe.arrayBaseOffset(Object[].class);
int addressSize = unsafe.addressSize();
long objectA
switch (addressSize)
objectAddress = unsafe.getInt(array, baseOffset);
objectAddress = unsafe.getLong(array, baseOffset);
throw new Error(&unsupported address size: & + addressSize);
return(objectAddress);
public static void main(String... args)
throws Exception
Object mine = &Hi there&.toCharArray();
long address = addressOf(mine);
System.out.println(&Addess: & + address);
//Verify address works - should see the characters in the array in the output
printBytes(address, 27);
public static void printBytes(long objectAddress, int num)
for (long i = 0; i & i++)
int cur = unsafe.getByte(objectAddress + i);
System.out.print((char)cur);
System.out.println();
您可能的代码
相关聚客文章
荣誉:2086
相关专栏文章君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
计算机取证物理内存镜像获取技术的研究与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口查看: 4495|回复: 8
知道内存指针以及偏移量,如何获取指向的地址?
阅读权限20
在线时间 小时
结帖率: (1/3)
-7D96--B72441ACBE53.jpg (66.09 KB, 下载次数: 0)
19:28 上传
看图给分,求高手解剖!
各种思路选一:
& && &1.比如他们的关系式:指针与偏移量(1)然后怎么得到添加新地址(2),需知道之间的关系怎么计算?
& && &2.有没代码可以从,指针 偏移量(1)得出 添加新地址(2),怎么写?
内存.读代码(基址+偏移量)
回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至
可获得加分喔。友情提醒:本版被采纳的主题可在
帖子申请荣誉值,获得 1点 荣誉值,荣誉值可兑换终身vip用户组哦。快捷通道: →
您可以选择打赏方式支持楼主
阅读权限70
在线时间 小时
结帖率: (9/17)
内存.读代码(基址+偏移量)
我知道了!&
阅读权限20
在线时间 小时
结帖率: (1/3)
求高手解剖下!感激不尽,追加赏金!
阅读权限70
在线时间 小时
结帖率: (15/25)
&&内存_驱动读写1.读整数型 (取进程ID (“你的进程名.exe”), 十六到十 ()).版本 2
内存_驱动读写1.读整数型 (取进程ID (“你的进程名.exe”), 十六到十 ())
阅读权限70
在线时间 小时
结帖率: (15/25)
内存_驱动读写1.读整数型 (取进程ID (“你的进程名.exe”), 十六到十 ())
& & 参数1:进程ID
& & 参数2:
阅读权限70
在线时间 小时
结帖率: (15/25)
内存_驱动读写1.读整数型 (取进程ID (“你的进程名.exe”), 十六到十 ())
& & 参数1:进程ID:取进程ID (“你的进程名.exe”)' 你的进程名
& & 参数2:内存地址:十六到十 ()&&' 可以写你的十六进制的地址,也可以手动转换成十进制的, 然后自己写到里面就可以了,至于是读出来,还是写就看你了,不懂QQ联系我,QQ
阅读权限20
在线时间 小时
结帖率: (1/3)
我要的是:返回十六进制值&指针取内存地址(进程,地址,偏移量)
阅读权限10
在线时间 小时
首先获取窗口句柄 可以用FindWindow
然后获取进程PID 可以用GetWindowThreadProcessId
当然也可以通过进程名取ID
然后打开进程返回对象句柄 OpenProcess
最后读写内存 WriteProcessMemory
阅读权限70
在线时间 小时
签到天数: 2 天
支持下完全不理解&&
精易论坛 - 有你更精彩 /1
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,企业QQ: ,邮箱:@
Powered by
粤公网安备 25如何读取内存的数据?
如何访问一个进程的内存空间 &&
在WIN32中,每个应用程序都可“看见”4GB的线性地址空间,其中最开始的4MB和最后的2GB由操作系统保留,剩下不足2GB的空间用于应用程序私
有空间。具体分配如下:0xFFFFFFFF-0xCGB用于VxD、存储器管理和文件系统;0xBFFFFFFF-
0xGB用于共享的WIN32 &
DLL、存储器映射文件和共享存储区;0x7FFFFFFF-0x为每个进程的WIN32专用地址;0x003FFFFF-
0x为MS-DOS & 和 &
WIN16应用程序;0x00000FFF-0x为防止使用空指针的4,096字节。以上都是指逻辑地址,也就是虚拟内存。
虚拟内存通常是由固定大小的块来实现的,在WIN32中这些块称为“页”,每页大小为4,096字节。在Intel
CPU结构中,通过在一个控制寄存器中设置一位来启用分页。启用分页时CPU并不能直接访问内存,对每个地址要经过一个映射进程,通过一系列称作“页表”
的查找表把虚拟内存地址映射成实际内存地址。通过使用硬件地址映射和页表WIN32可使虚拟内存即有好的性能而且还提供保护。利用处理器的页映射能力,操
作系统为每个进程提供独立的从逻辑地址到物理地址的映射,使每个进程的地址空间对另一个进程完全不可见。WIN32中也提供了一些访问进程内存空间的函
数,但使用时要谨慎,一不小心就有可能破坏被访问的进程。本文介绍如何读另一个进程的内存,写内存与之相似,完善一下你也可以做个
之类的内存修改工具。好吧,先准备好编程利器Delphi & 和 &
参考手册 & MSDN & ,Now
& begin! &
ReadProcessMemory & 读另一个进程的内存,原形如下:
& & BOOL &
ReadProcessMemory( &&
& & HANDLE &
hProcess, & & &
被读取进程的句柄; &&
& & LPCVOID &
lpBaseAddress, & &
& // & 读的起始地址;
& & LPVOID &
lpBuffer, & & &
存放读取数据缓冲区; &&
& & DWORD &
nSize, & & &
一次读取的字节数; &&
& & LPDWORD &
lpNumberOfBytesRead & // &
实际读取的字节数; &&
& hProcess & 进程句柄可由OpenProcess
& 函数得到,原形如下:
& & & HANDLE
& OpenProcess(
& & DWORD &
dwDesiredAccess, & // & 访问标志;
& & BOOL &
bInheritHandle, & &
& // & 继承标志;
& & DWORD &
dwProcessId & &
& // & 进程ID;
& ---- & 当然,用完别忘了用
& CloseHandle & 关闭打开的句柄。读另一个进程的内存
& dwDesiredAccess & 须指定为
& PROCESS_VM_READ & ,写另一个进程的内存
& dwDesiredAccess & 须指定为
& PROCESS_VM_WRITE &
,继承标志无所谓,进程ID可由 & Process32First
& 和 & Process32Next
& 得到,这两个函数可以枚举出所有开启的进程,这样进程的信息也就得到了。
& Process32First & 和
& Process32Next是由 & TLHelp32
& 单元提供的,需在 & uses
& 里加上TLHelp32。ToolsHelp32 &
封装了一些访问堆、线程、进程等的函数,只适用于Win9x,原形如下: &
& & & BOOL
& WINAPI & Process32First(
& HANDLE & hSnapshot
& 由 & CreateToolhelp32Snapshot
& & & 的系统快照句柄;
& & LPPROCESSENTRY32
& lppe & // &
指向一个 & PROCESSENTRY32 & 结构;
& & & BOOL
& WINAPI & Process32Next(
& & HANDLE &
hSnapshot & & &
& 由 & CreateToolhelp32Snapshot
& & & 的系统快照句柄;
& & LPPROCESSENTRY32
& lppe & // &
指向一个 & PROCESSENTRY32 & 结构;
& hSnapshot & 由
& CreateToolhelp32Snapshot &
返回的系统快照句柄; &&
& CreateToolhelp32Snapshot &
原形如下: &&
& & & HANDLE
& WINAPI &
CreateToolhelp32Snapshot(
& & DWORD &
dwFlags, & & &
& 快照标志; &
& & DWORD &
th32ProcessID & // & 进程ID;
& 现在需要的是进程的信息,所以将 & dwFlags
& 指定为 & TH32CS_SNAPPROCESS,
& th32ProcessID &
忽略;PROCESSENTRY32 & 结构如下:
& & & typedef
& struct & tagPROCESSENTRY32
& & DWORD &
& // & 结构大小;
& & DWORD &
cntU & & &
此进程的引用计数; &&
& & DWORD &
th32ProcessID; & &
& // & 进程ID;
& & DWORD &
th32DefaultHeapID; & & //
& 进程默认堆ID;
& & DWORD &
th32ModuleID; & &
& & // & 进程模块ID;
& & DWORD &
& // & 此进程开启的线程计数;
& & DWORD &
th32ParentProcessID;// & 父进程ID;
& & LONG &
& pcPriClassB &
& // & 线程优先权;
& & DWORD &
& 保留; &
& & char &
szExeFile[MAX_PATH]; & // & 进程全名;
& PROCESSENTRY32;
至此,所用到的主要函数已介绍完,实现读内存只要从下到上依次调用上述函数即可,具体参见原代码: &
& procedure &
TForm1.Button1Click(Sender: & TObject);
FSnapshotHandle:TH &&
FProcessEntry32:TProcessEntry32;
& : & BOOL;
& & & ProcessID
ProcessHndle & : & TH
lpBuffer:pB &&
& & & nSize:
lpNumberOfBytesRead: & DWORD;
& begin &&
FSnapshotHandle:=CreateToolhelp32Snapshot(
& TH32CS_SNAPPROCESS,0);
& & //创建系统快照
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
& & //先初始化 &
FProcessEntry32 & 的大小
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
& & & while
& Ret & do
& & & begin
s:=ExtractFileName(FProcessEntry32.szExeFile);
s='KERNEL32.DLL' & then
& ProcessID:=FProcessEntry32.th32ProcessID;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
& //循环枚举出系统开启的所有进程,找出“Kernel32.dll”
CloseHandle(FSnapshotHandle);
Memo1.Lines.Clear & ;
memo1.lines.add('Process & ID &
'+IntToHex( &&
FProcessEntry32.th32ProcessID,8));
memo1.lines.Add('File & name &
'+FProcessEntry32.szExeFile);
& & ////输出进程的一些信息
& & & nSize:=4;
lpBuffer:=AllocMem(nSize);
ProcessHndle:=OpenProcess(PROCESS_VM_READ,false,ProcessID);
memo1.Lines.Add & ('Process &
Handle & '+intTohex(ProcessHndle,8));
& i:=$ & to
& $0080005f & do
& & & begin
& & ReadProcessMemory(
& ProcessHndle,
& Pointer(i),
& lpBuffer,
& lpNumberOfBytesRead
& & s:=s+intTohex(lpBuffer^,2)+'
& //读取内容
& & if & (i
& mod & 16) & =0
& Memo1.Lines.Add(s);
& //格式化输出
FreeMem(lpBuffer,nSize); &&
CloseHandle(ProcessHndle);
& //关闭句柄,释放内存
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如果获取其它进程的DLL内存地址?
本回答由提问者推荐
var sogou_ad_id=731547;
var sogou_ad_height=160;
var sogou_ad_width=690;

我要回帖

更多关于 js获取物理地址 的文章

 

随机推荐