C# 或 JAVA 如何获取进程在内存中的信息

C# 或 JAVA 如何获取进程在内存中的信息
我想知道一个程序在内存中存放了什么信息(所有的信息,如变量和常量例如IE或者QQ这两个大家都有举例比较好)用C#最好Java也可以 用list 存放 物理位置 和 内容

第1个回答  2013-06-18
.↑ (松开前进再迅速按下喷火)
第2个回答  2013-06-18
using System.Runtime.InteropServices;
using System.Text;
public class Function
{

public static byte PtrToByte( int Ptr )
{
byte b = Marshal.ReadByte( ( IntPtr ) Ptr );

return b;
}

public static char PtrToChar( int Ptr )
{
byte b = Marshal.ReadByte( ( IntPtr ) Ptr );

return ( char ) b;
}

public static short PtrToShort( int Ptr )
{
short b = Marshal.ReadInt16( ( IntPtr ) Ptr );

return b;
}

public static ushort PtrToUShort( int Ptr )
{
ushort b = ( ushort ) Marshal.ReadInt16( ( IntPtr ) Ptr );

return b;
}

public static int PtrToInt( int Ptr )
{
int b = Marshal.ReadInt32( ( IntPtr ) Ptr );

return b;
}

public static uint PtrToUInt( int Ptr )
{
uint b = ( uint ) Marshal.ReadInt32( ( IntPtr ) Ptr );

return b;
}

public static long PtrToLong( int Ptr )
{
long b = Marshal.ReadInt64( ( IntPtr ) Ptr );

return b;
}

public static ulong PtrToULong( int Ptr )
{
ulong b = ( ulong ) Marshal.ReadInt64( ( IntPtr ) Ptr );

return b;
}

// Convert an ip address stored an address to equivalent string value
public static string GetPtrToIpAddr(int intPtr, int varlen)
{
int i = 0;
StringBuilder sb = new StringBuilder(0,varlen*4);
byte[] byx = new byte[varlen];

// ip address cann't have zero value
// ip address cann't have zero length
if( ( intPtr == 0 ) || ( varlen == 0 ) ) return "";
Marshal.Copy( ( IntPtr ) intPtr , byx , 0 , varlen );
for( i = 0; i < varlen - 1; i ++ )
{
sb.Append(byx[i]);
sb.Append('.');

}
sb.Append(byx[varlen - 1]);

return sb.ToString();

}

}

首先要知道内存地址,然后用上面的方法读取内存地址中的值

java 如何获得一个进程的内存使用情况,cpu运行的时间
如果是第一种情况,那你还需要在java内部再起一个进程,通过执行操作系统的shell命令来查看那个进程的运行状态。比如那个外部进程的ID为3119,则执行cat \/proc\/3119\/status | grep VmRSS就可以过滤出该进程的物理内存占用量。如果是第二种情况,(假定你问的就是这种情况)。先说内存占用量:一般说来,...

在c#中如何使用process这个类来获取进程的详细信息
\/\/ Process[] p = Process.GetProcesses();\/\/获取所有进程信息string cpu = string.Empty;string info = string.Empty;PerformanceCounter pp = new PerformanceCounter();\/\/性能计数器pp.CategoryName = "Process";\/\/指定获取计算机进程信息如果传Processor参数代表查询计算机CPU pp.CounterName = "% Processor Time...

WinForm(C#)根据进程名获取进程的内存使用量?
用Process, (System.Diagnose;) Process.GetProcessByName, 返回一个Process数组。对找到的Process对象有privatebytes属性,这个属性可以认为是进程的内存使用量。

大部分c#应用程序中的变量 为什么都找不到其内存基址?
不像其他人回答的那样, 一般基址这个概念是用于游戏修改的,游戏大多数都是C++写的,内存地址自由分配,所以有基址这个概念。而C#程序不同,.Net 和Java这2种语言写出来的程序都是运行在 虚拟机中的,也就是说他们的指针并不是由程序代码中分配的,而是由虚拟机 托管动态生成的,所以你找不到固定...

java中如何获取程序的基目录,就是实现C#中AppDomain.CurrentDomain.BaseDir...
类名.class.getProtectionDomain().getCodeSource().getLocation();这样就可以获取到该类的运行目录了。

C# 程序如何设置启动的内存分配(同时学习过Java与C#的前辈请进)
(Java heap space、PermGen space、unable to create new native thread.据我所知就这三种内存益处的情况)。而同样的,你如果想设置C#程序的【内存最小值与最大值和其他参数】就是想解决内存的溢出,而这些东西是由CLR自己决定的。那CLR又是什么呢,你可以理解它跟JAVA的JVM是一样。JVM有它的运行...

C#或Java怎么修改内存地址的值,给个代码要有注释?
Java的引用是不能像C语言的指针一样进行++的操作 也不能随便的想跳到什么位置就跳什么位置 修改地址 String c=“hi”;c=“hello”;这就是例子 变量c是在栈内存中的 他开始存的是堆内存中“hi”的字符串的内存地址 变为“hello”字符串的内存地址 至于“hi” “hello”到地内存地址是多少...

Java 和 C# 中 substring 方法
在Java和C#编程语言中,substring方法用于提取字符串的子串。方法的使用在两个语言中具有相似的语法,但参数解释和行为存在差异。当仅提供一个参数时,Java和C#的substring方法执行相同的操作,即从指定索引开始获取字符串中的所有剩余字符。然而,当两个参数一同使用时,两个语言的行为就有所不同。在Java...

弄界面用c++好,还是c#或Java好啊
当然是C#或者Java了。C++的算法因为可以使用指针对内存进行操作,因而程序的效率比较高,所以多用于底层算法的实现。而C#和Java则有着可视化的编程界面,可以直接拖动控件,并且修改控件属性,使用非常方便(和MFC中的Dialog和FormView一样)。很多时候,程序员会利用C#设计界面,然后使用C++进行编程。当然,...

c和java的前景谁更好?(java和c)
3、在工资方面很多公司c语言的待遇要比java的好。4、从学习难度来看,Java语言要比C语言简单一些。因为c语言属于底层开发语言,算法逻辑较为复杂,例如指针、内存分配、释放等概念都需要我们掌握。5、java要比c++好学,二者相比之下,java的就业前景更好,薪资待遇更高一些。6、Java更好就业,因为Java一直...

相似回答