填充内存的命令
- 格式:docx
- 大小:3.89 KB
- 文档页数:4
wmic memorychip详解
Windows系统最常用的命令行维护工具之一wmic,可以帮助用户更好地了解系统中的硬件设备,比如内存芯片。
本文将详细介绍wmic memorychip命令以及其使用方法。
一、什么是wmic memorychip?
wmic memorychip命令是一种Windows系统自带的命令行维护工具,主要用来查询本机内存芯片的信息,以判断内存的类型、总容量和每条内存条的容量。
二、wmic memorychip的使用方法
1、打开运行输入cmd,右键以管理员身份运行,输入wmic memorychip get命令;
2、输入wmic memorychip list brief命令,获取本机所有内存芯片的简要信息;
3、输入wmic memorychip get *命令,获取本机所有内存芯片的详细信息;
4、输入wmic memorychip wherecaption like %xxx%” get性名,可以根据芯片型号来查询信息,xxx是芯片型号;
5、输入wmic memorychip get name,TYPE,Speed,可以获取内存芯片的型号、类型和速度等信息。
三、wmic memorychip的优缺点
wmic memorychip的优点是功能强大,可以查询系统中的内存芯片信息,便于用户对系统的维护和管理;其缺点是命令行复杂,需要
熟悉命令行的基本操作方法,且结果比较复杂,不便于阅读。
四、总结
wmic memorychip命令是一款强大的Windows系统的命令行维护工具,可以查询系统中的内存芯片类型、容量、速度等信息,可以提供用户更多的管理维护能力,但是使用起来比较复杂,需要用户掌握一定的命令行知识。
快速填满磁盘空间的方法填满磁盘空间是一种极端行为,通常不建议这样做,因为它可能会导致系统崩溃或数据丢失。
但是,有时候我们需要测试磁盘空间不足的情况,或者有其他特定的需求。
下面是一些可以快速填满磁盘空间的方法:方法一:使用命令行工具在Windows系统中,你可以使用命令行工具快速填满磁盘空间。
首先,你需要打开命令提示符或Powershell终端。
然后,使用以下命令创建一个指定大小的文件:```cmdfsutil file createnew C:\path\to\file.txt 1073741824```其中,1073741824是以字节为单位的文件大小,可以根据需要进行修改。
这个命令将在指定路径下创建一个大小为1GB的文件。
你可以多次运行这个命令来创建多个文件,以填满整个磁盘空间。
请确保你有足够的可用磁盘空间,以避免系统崩溃。
在Linux系统中,你可以使用`dd`命令来创建一个指定大小的文件。
以下是一个示例命令:```bashdd if=/dev/zero of=/path/to/file.txt bs=1M count=1024```这个命令将在指定路径下创建一个大小为1GB的文件。
你可以修改`count`参数来增加文件的大小。
方法二:复制大文件另一种填满磁盘空间的方法是复制一个非常大的文件。
你可以使用计算机上的任何文件复制工具来完成这个任务。
选择一个文件,确保它的大小超过磁盘可用空间的大小。
然后,将文件复制到磁盘上,直到磁盘空间不足。
请注意,复制大文件可能需要一段时间,具体取决于你的计算机性能和文件大小。
方法三:生成大量小文件你也可以生成大量小文件来填满磁盘空间。
你可以使用编程语言如Python或Bash脚本来实现这个目标。
以下是一个用Python生成大量小文件的示例代码:```pythonimport os#指定文件夹路径folder_path = '/path/to/folder'#指定文件大小(以字节为单位)file_size = 1024#生成大量小文件for i in range(1, 10001):file_path = os.path.join(folder_path, f'file{i}.txt')with open(file_path, 'wb') as f:f.write(os.urandom(file_size))```这段代码将在指定文件夹路径下生成10000个大小为1KB的文件。
memset函数memset函数是C语言提供的一种常用的内存操作函数,它的格式为:void * memset(void *s, int c, size_t n),其中s表示指向要操作的内存,c表示用于填充的参数,n表示要操作的字节数。
memset函数的功能是将指定的内存空间的前n个字节的值设置为c。
memset函数用来实现一段内存空间的填充,它一般用于初始化某一内存空间。
该函数有三个参数:第一个参数表示要初始化的内存空间,第二个参数表示填充的数据,第三个参数表示要填充的字节数。
memset函数只适用于字节内存空间,不能用于诸如int、float等类型的不同空间。
memset函数速度很快,但有时会出现不可预料的结果,因为它会将字节内存空间的值全部设置为指定的值,所以如果要处理一个大型的内存空间,可以考虑使用memset函数来完成。
memset可以实现内存的清零,也可以实现内存的填充,比如把一段内存空间全部填充为“A”,可以使用memset函数来执行:memset(s, A sizeof(s));如果要把一段字符串清零,可以使用memset 函数:memset(s, 0, sizeof(s));memset函数也可以用来设置一段内存空间的特定值,比如将一段内存空间的值全部设置为1,可以使用memset函数:memset(s, 1, sizeof(s));如果要将一段内存空间的值全部设置为-1,则可以使用memset函数:memset(s, -1, sizeof(s));memset函数还可以用来替代循环进行内存操作,比如将一段内存空间的值依次加上1,可以使用memset函数:memset(s, s+1, sizeof(s));这样可以大大提高程序的效率。
memset函数在计算机科学领域应用广泛,在许多程序中都可以使用到这个函数,它可以极大提高程序的执行效率,减少程序的研发成本。
从程序的性能上来看,memset函数具有较高的效率,因为它只需要进行一次内存操作就可以完成大量的操作,它的效率高于循环进行的内存操作。
Debug启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。
Debug [[drive:][path] filename [parameters]]参数[drive:][path] filename指定要测试的可执行文件的位置和名称。
parameters指定要测试的可执行文件所需要的任何命令行信息。
++说明使用 Debug 命令但不指定要测试的文件如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 Debug 提示符,连字符 (-)。
Debug 命令以下是 Debug 命令列表:? 显示 Debug 命令列表。
a 汇编 8086/8087/8088 记忆码。
c 比较内存的两个部分。
d 显示部分内存的内容。
e 从指定地址开始,将数据输入到内存。
f 使用指定值填充一段内存。
g 运行在内存中的可执行文件。
h 执行十六进制运算。
i 显示来自特定端口的 1 字节值。
l 将文件或磁盘扇区内容加载到内存。
m 复制内存块中的内容/n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。
o 向输出端口发送 1 个字节的值。
p 执行循环、重复的字符串指令、软件中断或子例程。
q 停止 Debug 会话。
r 显示或改变一个或多个寄存器。
s 在部分内存中搜索一个或多个字节值的模式。
t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要执行的指令的解码形式。
u 反汇编字节并显示相应的原语句。
w 将被测试文件写入磁盘。
xa 分配扩展内存。
xd 释放扩展内存。
xm 映射扩展内存页。
xs 显示扩展内存的状态。
分隔命令参数所有 Debug 命令都接受参数,除了 q 命令之外。
可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。
因此,以下命令等价:dcs:100 110d cs:100 110d,cs:100,110指定有效地址项Debug 命令中的 address 参数指定内存位置。
在Linux系统中,有一些常用的命令可以用来查看和管理内存。
以下是一些常见的Linux内存相关指令:
1. free:显示系统内存使用情况和交换空间使用情况。
示例:`free -h`
2. top:实时显示系统进程和内存使用情况。
示例:`top`
3. vmstat:显示系统虚拟内存统计信息,包括内存使用情况、I/O等。
示例:`vmstat`
4. ps:显示系统进程状态,包括进程的内存使用情况。
示例:`ps aux`
5. pmap:显示进程的内存映射情况。
示例:`pmap <pid>`
6. smem:综合显示系统内存使用情况,包括物理内存、共享内存、缓存等。
示例:`smem -r`
7. sar:系统活动报告,包括CPU、内存、磁盘等性能信息。
示例:`sar -r`
8. top命令中按下"Shift+m":按内存使用量排序显示进程列表。
示例:启动top命令后,按下Shift键再按m键。
这些命令可以帮助您了解系统当前的内存使用情况和进程的内存占用情况。
请注意,具体命令的参数和输出可能会因不同的Linux发行版和版本而有所不同。
您可以通过查阅相关文档或使用命令的帮助选项来获取更多详细信息。
电脑内存不足如何扩容在我们日常使用电脑的过程中,经常会遇到内存不足的情况。
这会导致电脑运行速度变慢、程序卡顿甚至死机。
那么,当电脑内存不足时,我们应该如何进行扩容呢?下面就来给大家详细介绍一下。
首先,我们需要了解一下电脑内存的基本概念。
内存,也称为主存,是计算机中用于暂时存储正在运行的程序和数据的部件。
内存的大小直接影响着计算机的运行速度和性能。
如果内存不足,计算机就需要频繁地从硬盘中读取数据,这会大大降低运行效率。
要扩容电脑内存,第一步是确定您的电脑是否支持内存扩容以及支持的内存类型和最大容量。
您可以通过以下几种方式来获取这些信息:1、查看电脑的用户手册或官方网站上的产品规格说明。
2、使用电脑自带的系统诊断工具。
在 Windows 系统中,可以按下Win + R 键,输入“dxdiag”命令,然后在打开的窗口中查看“内存”选项卡中的信息。
在确定了电脑支持的内存类型和最大容量后,我们就可以开始选择合适的内存了。
目前常见的内存类型有 DDR3、DDR4 等。
在选择内存时,需要注意以下几点:1、内存的频率:尽量选择与原内存频率相同或相近的内存,以确保兼容性。
2、内存的品牌:选择知名品牌的内存,质量和稳定性更有保障。
3、内存的容量:根据您的实际需求和电脑的最大支持容量来选择。
购买好合适的内存后,接下来就是安装了。
在安装内存之前,一定要先关闭电脑,并拔掉电源插头,以防止静电损坏电脑部件。
然后,按照以下步骤进行操作:1、打开电脑机箱。
不同型号的机箱打开方式可能会有所不同,一般可以通过拧下螺丝或按下卡扣来打开。
2、找到内存插槽。
内存插槽通常位于主板上,是一些长条形的插槽。
3、安装内存。
将内存的金手指对准插槽的缺口,然后均匀用力将内存插入插槽中,直到内存两端的卡扣自动扣紧。
如果需要安装多条内存,要注意按照主板说明书上的要求进行安装,一般是按照颜色或编号顺序插入。
安装好内存后,重新盖好机箱,插上电源插头,然后开机。
dd命令详解⼀、dd命令的解释。
dd:⽤指定⼤⼩的块拷贝⼀个⽂件,并在拷贝的同时进⾏指定的转换。
注意:指定数字的地⽅若以下列字符结尾则乘以相应的数字:b=512;c=1;k=1024;w=2参数:1. if=⽂件名:输⼊⽂件名,缺省为标准输⼊。
即指定源⽂件。
< if=input file >2. of=⽂件名:输出⽂件名,缺省为标准输出。
即指定⽬的⽂件。
< of=output file >3. ibs=bytes:⼀次读⼊bytes个字节,即指定⼀个块⼤⼩为bytes个字节。
obs=bytes:⼀次输出bytes个字节,即指定⼀个块⼤⼩为bytes个字节。
bs=bytes:同时设置读⼊/输出的块⼤⼩为bytes个字节。
4. cbs=bytes:⼀次转换bytes个字节,即指定转换缓冲区⼤⼩。
5. skip=blocks:从输⼊⽂件开头跳过blocks个块后再开始复制。
6. seek=blocks:从输出⽂件开头跳过blocks个块后再开始复制。
注意:通常只⽤当输出⽂件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7. count=blocks:仅拷贝blocks个块,块⼤⼩等于ibs指定的字节数。
8. conv=conversion:⽤指定的参数转换⽂件。
ascii:转换ebcdic为asciiebcdic:转换ascii为ebcdicibm:转换ascii为alternate ebcdicblock:把每⼀⾏转换为长度为cbs,不⾜部分⽤空格填充unblock:使每⼀⾏的长度都为cbs,不⾜部分⽤空格填充lcase:把⼤写字符转换为⼩写字符ucase:把⼩写字符转换为⼤写字符swab:交换输⼊的每对字节noerror:出错时不停⽌notrunc:不截短输出⽂件sync:将每个输⼊块填充到ibs个字节,不⾜部分⽤空(NUL)字符补齐。
⼆、dd应⽤实例。
1.将本地的/dev/hdb整盘备份到/dev/hdddd if=/dev/hdb of=/dev/hdd2.将/dev/hdb全盘数据备份到指定路径的image⽂件dd if=/dev/hdb of=/root/image3.将备份⽂件恢复到指定盘dd if=/root/image of=/dev/hdb4.备份/dev/hdb全盘数据,并利⽤gzip⼯具进⾏压缩,保存到指定路径dd if=/dev/hdb | gzip > /root/image.gz5.将压缩的备份⽂件恢复到指定盘gzip -dc /root/image.gz | dd of=/dev/hdb6.备份磁盘开始的512个字节⼤⼩的MBR信息到指定⽂件dd if=/dev/hda of=/root/image count=1 bs=512count=1指仅拷贝⼀个块;bs=512指块⼤⼩为512个字节。
所谓的手机指令,就是指在手机上输入某些特定的组合键,而出现的某些功能。
比如输入*#06# 则会出现IMEI。
也叫手机串号。
根据手机的不同,指令也不同,所以一下指令不是所有手机都可以的。
通用指令*#06# 显示IMEI号;*#9999# 或*#0837# 显示软件版本;*#0001# 显示RS232串行通信参数设置;*#0228# 显示电池容量和温度;*#0523# 调节对比度;*#0636# 存储器容量显示*#0778# SIM卡信息*#0324# 网络检测(工程模式)*#9998*228# 电池参数显示,类型/电压/温度*#9998*289# 铃声调整,振铃器频率测试/显示频率,上下键调节*#9998*364# 显示Watchdog状态*#9998*427# WATCHDOG信号路径设置*#9998*523# 液晶显示对比度调节,上下键调节*#9998*3323# 开启工程模式*#9998*746# SIM卡文件规格测试*#9998*5646# 更改开机显示国家*2767*2878# 主复位*2767*927# WAP部分清空对于进WAP设置死机*#9998*4357# 可用指令列表*#0000# 查看版本(nokia手机适用)*#0842# 测试震动*#0289# 测试响铃*#0288# 电池状态*#0782# RTC Display(好象是显示当前时钟)*#0523# LCD对比度*#9998*0377# 软件出错LOG*#9998*5646# GSM LOGO SET(LOGO设置)*#9998*0778# or *#0778# SIM Serv .Table*#0638# SIM net Work ID*#0776# SIM info(SIM卡信息)*#9998*0076# Prodution No*#9998*3323# Forced Crash(此栏估计是程序调试所用,进入后有如下菜单,慎用,有些死机628的指令是8999,以前的三星是9998*#8999*782# 显示日期闹铃*#8999*246# 显示内存容量*#8999*544# (不知道是什么)*#8999*636# 显示内存状态*#8999*638# 显示网络信息*#8999*786#,报警时显示:5d21h25m09s*#8999*246# 显示内存容量编辑本段三星手机指令三星复位过电话:*2767*2878#三星硬件版本:*#8999*837#三星解话机锁:*2767*2878#/*2767*7377#三星码片复位:*2767*3855# 也可用于解机锁或卡锁三星显温度、电池容量:*#0228#三星调显示屏对比度:*#0523#三星软件版本:*#9999#三星A100-A188看版本:*#0837#三星手机的秘籍:取消开机显示的国家名SGH-800c:输入*#9998*268#,这时手机会出现一个菜单,按向上或向下的按键,选取Default Logo 即可;SGH-A100:输入*#9998*627837793#,这时手机会显示输入的命令不对,不要紧,按一下向下的箭头,输入*#9998*5646#,选取Default Logo 即可*#9998*4357# 可用指令列表(即HELP,可看到以下大部分指令);*#9999# 查看软件版本;*#0837# 显示硬件版本(包括软件版本和硬件生产日期,第6屏MP V1.xxx为硬件版本);*#0001# 显示RS232串行通信参数设置;*#0324# 网络检测(工程模式);*#0636# 存储器容量显示;*#0842# 测试震动;*#0289#或*#9998*289# 测试响铃(铃声调整,振铃器频率测试/显示频率,上下键调节);*#0228#或*#9998*228#或*#1999# 显示电池的所有信息,电池参数显示,电池容量,类型/电压/温度;*#0778#或*#9998*0778# 翻屏,就可以显示SIM卡的详细信息了;*#0782# RTC Display(好象是显示当前时钟)*#0523#或*#9998*523# LCD对比度,上下键调节*#9998*364# 显示Watchdog状态*#9998*427# WATCHDOG信号路径设置*#9998*746# SIM卡文件规格测试*#9998*0377# 软件出错LOG (EEPROM错误显示)*#0638# SIM net Work ID*#9998*3323# Forced Crash(此栏估计是程序调试所用,慎用,有些死机只能下电池了)*#9998*9266# 显示收信通道号及收信强度;*#9998*786# 显示的内容为本次开机的时间以及本次开机后到当前的时间长。
SOFT-ICE命令详解 (2)F-O命令: F作用: 填充某一块内存区域语法: F address l length data-list用法:length : 字节长度data-list: 所要填的数据. 可以是用单引号或双引号括起来的字符串执行F 命令将向所指定的内存区域填充length 长度的数据,如果数据不够长度,将重复数据,直到达到长度为止.点评: 无命令: FAULTS作用: 打开或关闭错误跟踪功能语法: FAULTS [on │ off]用法:FAULTS 命令将打开或关闭SoftICE的错误跟踪功能.不加参数将显示当前的开关状态.点评:由于SoftICE做为一个DEBUGGER,FAULTS 默认为ON, 所以一旦CPU有非法指令,SoftICE就会不停地弹出, 让你知道错在哪里,实际在工作中这样的情况如果太频繁地发生,最好将其置为OFF.我一般将其置为ON, 当发生非法指令时再手工置为OFF.你也可以在WINICE.DAT 中一开始就置其为OFF. 初学者一般不知道有这个命令, 一旦发生非法指令,除了按R键,只有傻站着 .-(命令: FILE作用: 显示或切换当前源文件# 语法: FILE [file-name]用法:FILE 命令常用来辅助在源文件中没有符号表的地方下断点. 用FILE命令将所需的源文件显示在代码窗口中,用SS 命令查找一下,再用BPX或F9来下断点.如果加文件名参数,则所选的文件变成当前文件, 并被显示在代码窗口中. 如果没有文件名参数,则显示当前的源文件(如果当前有的话).如果加 * ,则列出当前符号表中所有源文件. 在WIN95中,用FILE 加文件名同时也切换内存地址内容.点评:一般用于高级编程工具的辅助调试,如C语言等.不过这些编程工具已经内置DEBUGGER,所以就看个人习惯了.命令: FKEY作用: 显示或修改当前快捷键定义语法: FKEY [function-key string]用法:function-key: 快捷键:F1 - F12 :SF1 - SF12 : Shift键加F1 - F12CF1 - CF12 : Ctrl键加F1 - F12AF1 - AF12 : Alt键加F1 - F12string : 一个或多个SoftICE的命令.命令前加 ^ 表示在按快捷键时不显示相应的命令内容.命令后加;代表回车.FKEY 后只跟function-key,而不跟string,将取消该快捷定义.除了用FKEY命令可以定义快捷键外,用SoftICE的LOADER也能做到这一点默认快捷键清单:F1=h; F2=^wr;F3=^src; F4=^rs;F5=^x; F6=^ec;F7=^here; F8=^t;F9=^bpx; F10=^p;F11=^G @SS:ESP; F12=^p ret;SF3=^format; CF8=^XT;CF9=TRACE OFF; CF10=^XP;CF11=SHOW B; CF12=TRACE B;AF1=^wr; AF2=^wd;AF3=^wc; AF4=^ww;AF5=CLS; AF8=^XT R;AF11=^dd dataaddr->0;AF12=^dd dataaddr->4;CF1=altscr off; lines 60; wc 32; wd 8;CF2=^wr;^wd;^wc;点评: 无命令: FLASH作用: 在 P 和 T 命令执行过程中刷新Windows 屏幕语法: FLASH [on │ off]用法:如果将FLASH 置为 ON ,则在执行T或P命令时,SoftICE将刷新一下Windows 屏幕,这在调试一个直接对显存操作的程序时特别有用.在一般情况下,当用 P 命令跨过一个CALL 时,而此 CALL 又调用显示驱动程序时,Sof-tICE才重新刷新屏幕.FLASH 命令不带参数将显示当前状态.默认FLASH OFF.点评: 无命令: FORMAT作用: 改变数据窗口的显示格式语法: FORMAT用法:FORMAT 命令用来改变数据窗口的显示格式.SoftICE有快捷键 Shift-F3 来代替FORMAT.显示格式将按字节,字,双字,短实型,长实型,10字节实型循环.点评: 参见 D, DATA 命令.命令: G作用: 执行到某一地址语法: G [=start-address] [break-address]用法:=start-address: 开始地址break-address : 中断地址G 命令不带参数将从SoftICE中返回.如果带参数break-address,则SoftICE将在所指定的地址处下一个一次性断点; 如果带=start-address,SoftICE 将从指定的地址处开始执行,否则从当前CS:EIP处执行. 程序中其他的断点(非G命令下的断点)照样起作用. 无论是谁先弹出,都将清除G 命令所下的一次性断点.G 命令不带参数类似于 X 命令.G 命令在Windows95中使用除错寄存器, 如果除错寄存器用完,则用INT 3.点评: 由于G 命令缺省用DRx,所以有时可以对付一些在INT 3上作手脚的程序.命令: GDT作用: 显示全局描述符表语法: GDT [selector]用法:selector: 指定GDT选择器GDT 命令将显示全局描述符表的内容.如果加选择符参数,则只显示此选择符所指的描述符.输出:GDT 的线性基址和长度将显示在输出数据的顶行.输出数据的每一行内容的说明:value: 最低两位即描述符特权级type : 描述符类型,如下:Code16 : 16位代码描述符Data16 : 16位数据描述符Code32 : 32位代码描述符Data32 : 32位数据描述符LDT : 局部描述符表描述符TSS32 : 32位任务状态段描述符TSS16 : 16位任务状态段描述符CallG32: 32位调用门描述符CallG16: 16位调用门描述符TaskG32: 32位任务门描述符TaskG16: 16位任务门描述符TrapG32: 32位陷肼门描述符TrapG16: 16位陷肼门描述符IntG32 : 32位中断门描述符IntG16 : 16位中断门描述符Reserved: 保留的描述符base : 描述符中的段基址limit: 描述符中的段界限DPL : 描述符特权级,0,1,2,3present bit: P 或 NP 表示该段是否在内存中segment attributes: 段特性:RW: 数据段可读写RO: 数据段只读RE: 代码段可读可执行EO: 代码段只可执行B: TSS(任务状态段)忙置位ED: 数据扩展方式参见 LDT.点评:这段翻译并不完全用PDF手册上的.如"selector" 原指选择符(器),用来指向描述符表中的描述符, 而 PDF中type 的说明全用到 selector说的意思虽是一样,但和别的文献矛盾,故认为不妥,将其翻译成descriptor 即描述符.实际上可以看出,一个选择符指向一个描述符,两者是一致的.描述符类型实际上也就是指向它的选择符类型.命令: GENINT作用: 强行产生一个中断语法: GENINT [nmi │ int1 │ int3 │ interrupt-number]用法:interrupt-number: 对Windows95来说,0-5fhGENINT强行产生一个中断,用于SoftICE和别的DEBUGGER协作的时侯,如:GENINT nmi 将使SoftICE将控制返还给CodeView For Dos.(对其他DEBUGGER,请尝试0,1,2,3)GENINT还用于测试中断例程.但SoftICE不检测一个中断是否有效,它只是摹拟中断的产生,所以当用此命令时要注意相应的中断例程是否存在.点评: 无命令: H作用: 显示帮助信息语法: H [command]用法:键入 H 命令不带任何参数将显示所有命令的帮助. 要获得详细的帮助,在 H 后加命令名就可.详细的帮助将包括命令的描述,命令的语法,和例子.点评:H 命令可以很方便地帮助使用者查询SoftICE的命令.实际上在命令窗口的底部有一个状态条,它提供的实时帮助也是很有用的.命令: HBOOT作用: 系统重新启动语法: HBOOT用法:HBOOT 将重新启动计算机.等同于按 Ctrl+Alt+Del 组合键.HBOOT 一般都能成功,只有特殊情况下(某些插卡需要重加电)才用机器上的RESET或POWER键.点评:HBOOT 让我想到两件事:1,以前学微机时,老师老是盯着我们,唯恐我们乱启动机器.想起来真是不寒而栗, 好象是我们的过错一样.可机器明明死了嘛,不重新启动怎么行?2,有大部分品牌机上没有RESET键, 死机就按POWER键,按得老板倒抽凉气.:)命令: HEAP作用: 显示Windows全局堆语法: HEAP -L [free │ module-name │ selector]用法:-L : 只显示含局部堆的全局堆入口module-name: 模块名.selector : LDT 选择符HEAP FREE 将显示空闲的全局堆.HEAP 跟模块名将只显示由指定的模块拥有的全局堆入口. HEAP 跟LDT 选择符将只显示与此选择符相应的全局堆入口. HEAP 不带参数将显示整个全局堆的情况.输出:selector or handle: 选择符符或句柄.address : 32位虚拟地址size : 堆的大小(字节)module name : 模块名--------------------------------type : 全局堆的类型code : 不可丢弃的代码段code D : 可丢弃的代码段Data : 数据段ModuleDB : 模块数据基础段TaskDB : 任务数据基础段BurgerM : "三明治"(就是堆本身)Alloc : 被动态分配的内存Resource : Windows 资源--------------------------------额外信息:如果某全局堆的入口是代码段或数据段,则会显示该段在.EXE中的段号.如果某全局堆的入口是Windows资源,则会附加显示如下资源类型:--------------------------------UserDef(用户自定义);Icon(图标);String(字符串); Accel(快捷键);IconGrp(图标组);Cursor(光标);Menu(菜单);FontGrp(字体组);ErrTable(错误表);NameTabl(名字表);Bitmap(位图);Dialog(对话框);Font(字体);CursGrp(光标组)--------------------------------点评:PDF 手册中称堆本身为Burger-->"三明治"(碎肉夹饼)很贴切,堆本来就是乱七八遭.命令: HEAP32作用: 显示Windows全局堆语法: HEAP32 [hheap32 │ task-name]用法:hheap32 : 由HeapCreate()返回的堆句柄.task-name: 32位任务的名字.HEAP32 不带参数显示32位进程的堆的情况:.KERNEL32 缺省系统堆..进程用HeapCreate()申请的私有堆..两个由VMM产生的Ring-0级的堆.第一个是换页锁定的堆,第二个是可换页的堆..一个属于所有虚拟机的Ring-0堆.如果加上进程名,SoftICE将显示所有该进程的缺省堆,且地址内容也切换到该进程中.如果加上堆的基地址而不是进程名,SoftICE将显示该进程的非缺省堆.WINDOWS 95的调试版还提供了额外的调试信息,想要用SoftICE看到这些信息,必须:.对于KERNEL32 Ring-0堆,必须安装有SDK除错版..对于VMM Ring-0堆,必须安装VMM的DDK除错版.输出信息(HEAP32):HeapBase : 堆的基址MaxSize : 堆可增长的最大范围, 在此范围内堆无需再创建一个新段.Committed: 以千字节为单位当前存在于物理内存中的被保证的内存大小Segments : 堆中段的数量. 当堆增长超出段所能容纳的范围,就建立一个新段Type : 堆的类型:--------------------------------Private: 由应用程序建立的Ring-3堆System : KERNEL32建立的Ring-3堆Ring0 : VMM建立的Ring-0堆VMM## : 由VMM建立的为特定虚拟机存储数据的堆.--------------------------------输出信息(HEAP32 带参数):Address: 堆元素的地址.Size : 以字节为单位堆元素的长度.Free : 如果堆元素是空闲的块,则会显示"FREE",否则不显示.点评: 在SoftICEv3.20实际操作上和手册说的中有些许不同.命令: HERE作用: 运行到当前光标所在行语法: HERE用法:HERE 命令让程序一直走到光标所在行再停下来.注意:只有当光标在代码窗口中时才有效.如果代码窗口不可见或光标不在代码窗口中,则请用 G 命令代替.也可用EC 命令将光标移到代码窗口中去,再用 HERE.HERE 命令有个快捷键 F7.将光标定位到你想让程序暂停的指令处,按下F7 ,程序将在此处设一个一次性断点.程序中其他非一次性的断点照样起作用. 无论是谁先弹出,都将清除 HERE 所下的一次性断点.和G命令一样,HERE 命令尽量采用除错寄存器DRx, 只有用完时才用INT 3点评: 无.命令: HWND作用: 显示窗口句柄的信息语法: HWND [-x][hwnd │ [[level][process-name]]用法:level : 窗口等级号码.0 是最高级.1 其次,等等.窗口等级代表了父窗口和子窗口的关系. -x : 显示窗口的冗余信息.hwnd : 窗口句柄.process-name: 任何当前进程名如果指定了窗口句柄,就无需指定等级, 进程名等其他参数,SoftICE将显示所指定窗口句柄的信息.输出:Class Name : 此窗口所属类的名称或类的原子.Window Procedure: 窗口函数.点评: 窗口句柄很有用的.(废话!)命令: I作用: 从输入/输出(I/O)端口读入数据语法: I[size] port用法:size: B 字节(默认);W 字;D 双字port: 端口地址.I 命令在大多数情况下是作一个I/O输入指令, 获取真实的硬件端口的数据. 在虚拟端口的情况下,取得真实值和应用程序所见到的虚拟值可能不同. 对于 21h 和A1h 端口,SoftICE 是例外,它不进行读取,而是返回So-ftICE弹出时的值.点评: 参见 O 命令.命令: I1HERE作用: 遇到内嵌的INT 1指令时激活SoftICE语法: I1HERE [on │ off]用法:I1HERE 命令使SoftICE在遇到程序中内嵌的INT 1指令时弹出.I1HERE在调试程序时需在某处暂停时特别有用.在SoftICE弹出之前, SoftICE会检查当前是否有一条INT 1指令在程序中.如果没有的话,SoftICE将不弹出.在程序要暂停的指令之前加一句INT 1 就能做到这一点.SoftICE弹出时,EIP 会停在INT 1的下一条指令后.I1HERE 不带参数将显示当前I1HERE的状态.缺省为OFFI1HERE 在与如BoundsChecker 之类的调试工具分工协作时很有用,因为BoundsChecker用到 INT 3,为了防止冲突应使用INT 1. 另外,VMM,Windows内存管理的VxD,在Windows出现某些严重错误时会在严重错误返回前执行一个INT 1指令.如果此时I1HERE 为ON时, 你就能跟踪这类错误. 如由VMM因换页错误而产生INT 1 时寄存器的值如下:.EAX = 错误地址..ESI 指向一个ASCII字符串(信息)..EBP 指向一个CRS(在DDK的VMM.INC中定义的客户寄存器结构)点评:基础信息: INT 1 实际上是单步中断的处理例程. CPU在检测到 TP 标志为1时(TP是由DEBUGGER设的), 就自动进行这一例程. DEBUGGER 们挂接这个中断例程进行一些诸如显示当前寄存器值等操作,并等待用户进一步的指令. 在程序中直接用 INT 1指令也能达到效果.SoftICE不象DOS下的DEBUG.EXE,一碰到 INT 1 就中断,缺省是不中断的,只有当I1HERE 为 ON 时才中断.命令: I3HERE作用: 在遇到INT 3 指令时激活SoftICE语法: I3HERE [on │ off]用法:I3HERE ON 将使SoftICE每碰到一个 INT 3 时都弹出,这在调试程序时需要在某处暂停特别有用.在你需要暂停的指令之前加一个INT 3 就行.如果你是编 WINDOWS程序,加个函数DebugBreak(). 这个函数也执行一个INT 3.I3HERE 不带参数将显示当前状态.请参见I1HERE.点评:基础信息: INT 3 是断点中断处理例程.也被DEBUGGER们挂接,显示寄存器值,给出一些信息,并等待用户下一步操作. DEBUGGER在下断点时,将断点处的指令替换成INT 3,把替换下的指令保存,在执行完例程后再恢复原先保存的指令,修改堆栈中的断点地址, 使程序得以继续. DOS下的老DEBUG.EXE当遇到程序中的INT 3 指令时会进行同样的操作,也修改堆栈中的断点地址,所以IP又停在那条INT 3 上, 如果你打入 G ,程序将一直停在此处,这时改一下IP就可以了.命令: IDT作用: 显示中断描述符表语法: IDT [interrupt-number]用法:interrupt-number: 所要显示的中断号IDT 命令读取中断描述符表寄存器的值, 获得表基址,然后显示中断描述符表的内容.IDT 命令不带参数将显示所有中断的情况,如果带中断号, 则只显示相应的入口. 输出参数如下:interrupt number: 0-05fh的中断号.interrupt type : 中断类型如下:---------------------CallG32: 32位调用门.CallG16: 16位调用门.TaskG: 任务门.TrapG16: 16位陷肼门.TrapG32: 32位陷肼门.IntG32: 32位中断门.IntG16: 16位中断门.---------------------address : (选择符:偏移量)形式的地址.selector's DPL : 选择符的描述符特权级,0,1,2,3present bit : P 或 NP, 表示该描述符是否在内存中.Owner+Offset : 符号名或拥有者名,和在它们中的偏移.点评: 参见GDT,LDT.命令: LDT作用: 显示局部描述符表语法: LDT [selector]用法:selector: 指定LDT 选择符LDT 命令将显示局部描述符表的内容. SoftICE先读取局部描述符表寄存器的值,再定位描述符表. 如果局部描述符表不存在,会显示一个错误信息. 如果指定选择符,则只显示该选择符所指向的描述符. 如果指定的选择符是一个全局选择符, 则SoftICE将自动显示该全局选择符所指的描述符.输出:LDT 的线性基址和长度将显示在输出数据的顶行输出数据的每一行内容的说明: value: 最低两位即描述符特权级type : 描述符类型,如下:---------------------------Code16 : 16位代码描述符Data16 : 16位数据描述符Code32 : 32位代码描述符Data32 : 32位数据描述符CallG32: 32位调用门描述符CallG16: 16位调用门描述符TaskG32: 32位任务门描述符TaskG16: 16位任务门描述符TrapG32: 32位陷肼门描述符TrapG16: 16位陷肼门描述符IntG32 : 32位中断门描述符IntG16 : 16位中断门描述符Reserved: 保留的描述符---------------------------base : 描述符中的段基址limit : 描述符中的段界限DPL : 描述符特权级,0,1,2,3present bit: P 或 NP 表示该段是否在内存中segment attributes: 段特性:---------------------------RW: 数据段可读写RO: 数据段只读RE: 代码段可读可执行EO: 代码段只可执行B : TSS(任务状态段)忙置位---------------------------点评:这段翻译并不完全用PDF手册上的.如"selector" 原指选择符(器),用来指向描述符表中的描述符,而PDF手册中type 的说明全用到 selector. 说的意思虽是一样,但和别的文献矛盾,故认为不妥,将其翻译成descriptor,即描述符. 实际上可以看出,一个选择符指向一个描述符,两者是一致的. 描述符类型实际上也就是指向它的选择符类型.命令: LHEAP作用: 显示Windows 局部堆语法: LHEAP [selector │ module-name]用法:selector : 局部描述符表数据选择符.module-name: 16位模块名.LHEAP 显示Windows程序在全局堆中申请的数据信息.如果不跟选择符参数,当前的DS 寄存器的内容(数据选择符)被做为缺省值. 用前次说过的HEAP 命令找标有LH 的选择符来做为LHEAP的参数.如果用module-name做参数,则SoftICE 用此模块的缺省数据段进行堆遍历.输出:offset: 16位的偏移量(相对于相应的选择符基址)size : 堆入口(每个组成部分)的字节大小.type : 类型如下:---------------------FIX : 固定的.MOV : 可移动的.FREE: 空闲的.---------------------handle: 相应的句柄.对固定的堆组成部分来说, 此值和offset 相等,且是由 LocalAlloc()返回的.对于可移动的组成部分来说,此值将会被做为LocalLock()的参数.点评: 无.(天气好热!翻译得好累!)命令: LINES作用: 改变SoftICE窗口的显示行数语法: LINES [25 │ 43 │ 50 │ 60]用法:LINES 命令用来改变SoftICE窗口的显示行数. 默认为25行.可以有:25 行;43 行;50 行;60 行;43,50,60行只适用于VGA卡.LINES 不带参数将显示当前行数.如果用 ALTSCR 命令切换显示器输出到单显,SoftICE自动转为25行,再转回VGA卡时要手工用LINES 命令来恢复原值.点评:实际上, 我的 3.20用的是SoftICE自带的通用视频驱动程序,行范围可以从25一直到128 !!(除非为SoftICE开的显存不够)命令: LOCALS作用: 从当前栈中列出局部变量语法: LOCALS用法:输出:Stack Offset : 栈偏移.Type definition: 类型定义.Value,Data,or structure symbol({...}): 值,数据,或结构符号.SoftICE根据局部变量的类型来用不同的形式显示它们,如果是指针,则显示所指向的数据.如果是结构,则显示结构符号.如果既不是指针,又不是结构,则显示本身值.点评: 无命令: M作用: 传送数据语法: M source-address l length dest-address用法:source-address: 源数据的起址;length : 要传送的字节长度;dest-address : 目的数据块的起址.用 M 命令将数据块从源地址传送到目的地址.如M ds:1000 l 2000 es:5000将2000h个字节从DS:1000h传到ES:5000h处.点评: 无命令: MACRO作用: 定义一个宏命令,使之执行一系列SoftICE指令.# 语法: MACRO [ macro-name] ││ [= "macro body"]用法:macro-name: 3-8个字符的宏名,(不区分大小写);macro-body: 用分号隔开的一系列SoftICE指令, 首末加冒号;* : 删除一个或所有的已定义的宏命令;= : 定义(或重定义)一个宏命令.MACRO 命令用于定义SoftICE指令的超集.macro-body可以包含SoftICE的指令,也可包含宏定义,甚至是当前的宏定义本身.(这当然会产生递归调用,如果编得不好的话会产生错误,也没有什么大意思).在这一系列命令之间用分号(;)隔开,最后一个命令后不用加分号.macro-body中还可以带入命令行参数,和DOS命令的%1,%2...一样,合法值在1-8之间.注意一点,macro-body首尾是用冒号的.所以在宏定义体中如果要用到 \, ", %时要在前加一 \,这跟C语言的写法是一致的.macro_name参数用来代表宏名,可以是字母或数字或下划线组成.可以是现有的宏名, 那样的话就会重定义这个宏.宏名不可以和现有的SoftICE内部指令相同.会发生错误.MACRO * 表示删除当前定义的所有(有名字的)宏.(因为断点的DO 子句实际上也是宏, 不过是无名字的,它们不能就这样被删除了!)MACRO mnames * 删除当前名为 mnames 的宏.MACRO mnames 将编辑名为 mnames 的宏, 在编辑过程中可以用ESC键取消改动.一个很有用的例子::MACRO 1shot = "bpx %1 do \"bc bpindex\""用这个宏可以设一个一次性断点,非常方便!点评: 无命令: MAP32作用: 显示当前所有32位模块的内存映象(图).语法: MAP32 [module-name │ module-handle │address]用法:module name : Windows模块名;module handle: 模块的基址;address : 落在可执行模块中的地址.MAP32 不带参数将显示所有的32位模块的信息.加参数将只显示指定模块的信息.输出如下:Owner : 模块名.OBJ Name: 可执行文件的区段名.Obj# : 可执行文件中的区段号.Address : 选择符:偏移量格式的区段地址.Size : 区段的大小(字节)Type : 区段类型:--------------------CODE 代码IDATA 初始化的数据UDATA 未初始化的数据RO 只读RW 读/写SHARED 对象是共享的.--------------------点评: 无命令: MAPV86作用: 显示当前虚拟机的DOS内存映象语法: MAPV86 [address]用法:address : 段:偏移量格式的地址MAPV86 不带参数将显示当前整个虚拟机的内存映象.加参数将显示指定包含所指定地址的内存区域的信息.有时侯DOS VM的页没有切进来,所以会有 "PAGE NOT PRESENT"的出错信息,所以可以再弹出一次.MAPV86 在配合SYMLOC命令时很有用,因为在Windows 启动前装载的程序,Windows不会自动将它们的符号信息映射到V86内存,用MAPV86命令就可以取得它们的代码段,将符号表与之对齐,就可以跟踪调试了.输出如下:VM ID : 虚拟机的ID.VM handle : 32位虚拟机的句柄.CRS pointer: 虚拟机的32位客户登记表的指针.(?)VM address : 32位线性地址.另外,如果SoftICE弹出时CS:IP指向一个MAPV86的入口,那一行的内容将高亮显示.点评: 无命令: MOD作用: 显示Windows模块列表.语法: MOD [partial-name]用法:partial-name: Windows模块名,(可以是开头的若干个字母).MOD 不带参数将显示所有的模块.若加 partial-name,则符合要求的模块将被列出.输出如下:module handle: 16位的句柄.base : 线性基址.pe-header : 选择符:偏移量格式的PE文件头.module name : 模块名.(编程序时在.DEF中用NAME或LIBRARY命名的.)file name : 文件的路径(全名).点评: 无命令: O作用: 向I/O端口输出数据.语法: O[size] port value用法:size : B 字节(缺省值);W 字;D 双字port : 端口地址.value: 要输出字节,字,或双字.O 命令将立即输出到硬件端口(当然那两个21h和A1h要等退出SoftICE窗口时才执行)(?)点评:关于21h和A1端口,二者是关系到中断的, PDF文档在这写得不是很详细.实际操作情况是多种多样的.。
.版本2.程序集内存操作, , 公开.子程序_初始化, , , 当基于本类的对象被创建后,此方法会被自动调用' 版本2' DLL命令RtlMoveMemory, 整数型, "kernel32.dll", "RtlMoveMemory", , ""' .参数Destination, 文本型, 传址数组, "类型为通用型,请在调试时调整其类型" ' .参数Source, 整数型, , "类型为通用型,请在调试时调整其类型"' .参数Length, 整数型, , "".子程序_销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用.子程序全局分配分配, 整数型, 公开, GlobalAlloc.参数标志, 整数型, , wFlags.参数字节, 整数型, , dwBytes返回(全局分配分配_ (标志, 字节)).子程序释放内存分配, 整数型, 公开, GlobalFree.参数内存句柄, 整数型, , hMem返回(释放内存分配_ (内存句柄)).子程序锁住全局内存块, 文本型, 公开, GlobalLock.参数内存句柄, 整数型, , hMem返回(锁住全局内存块_ (内存句柄)).子程序解锁全局内存块, 整数型, 公开, GlobalUnlock.参数内存句柄, 整数型, , hMem返回(解锁全局内存块_ (内存句柄)).子程序拷贝内存, 文本型, 公开, RtlMoveMemory.参数源缓冲区, 字节型, 数组, Source.局部变量返回, 文本型返回=取空白文本(取数组成员数(源缓冲区))拷贝内存_ (返回, 源缓冲区, 取数组成员数(源缓冲区))返回(返回).子程序填充内存, 文本型, 公开, $(b) RtlFillMemory.参数目的内存, 文本型, , Destination.参数填充内容, 字节型, , Fill 例子:取代码("A",)RtlFillMemory (目的内存, 取文本长度(目的内存), 填充内容)返回(目的内存).子程序内存清零, , 公开, RtlZeroMemory.参数目的内存, 文本型, , Destination.参数长度, 整数型, , Length内存清零_ (目的内存, 长度).子程序写内存字节集, 整数型, 公开, WriteProcessMemory写内存失败返回0 返回值.参数进程的句柄, 整数型, , hProcess , 进程的句柄使用函数OpenProcess() 返回。
填充内存的命令
一、概述
内存是计算机中非常重要的组成部分,它直接影响着计算机的性能和运行效果。
在某些情况下,我们需要填充内存以进行一些测试或者实验,而填充内存的命令可以帮助我们快速地完成这个任务。
本文将介绍几个常用的填充内存的命令,并对其使用方法进行详细讲解。
二、memset命令
memset命令是C/C++语言中的一个库函数,用于将一段内存空间的值设置为指定的字符。
在填充内存的过程中,我们可以利用memset 命令来将内存中的值设定为我们所需的值。
下面是memset命令的使用示例:
```c
#include <stdio.h>
#include <string.h>
int main() {
char buffer[1024];
memset(buffer, 'A', sizeof(buffer));
return 0;
}
在上述示例中,我们创建了一个大小为1024字节的字符数组buffer,并使用memset命令将其填充为'A'字符。
通过这个命令,我们可以快速填充内存,用于测试或者其他需要大量内存的场景。
三、dd命令
dd命令是一个在UNIX和类UNIX系统中常用的命令,用于执行低级复制操作。
除了复制文件之外,dd命令还可以用来填充内存。
下面是dd命令的使用示例:
```shell
dd if=/dev/zero of=memfile bs=1M count=1024
```
在上述示例中,我们使用dd命令将/dev/zero设备中的数据复制到memfile文件中,复制的数据块大小为1M,复制的数据块数量为1024。
通过这个命令,我们可以将大量的零填充到内存中,以达到填充内存的目的。
四、memtester命令
memtester命令是一个用于测试内存的工具,它可以模拟内存使用情况,检测内存中的错误。
在memtester命令中,我们可以通过指定填充模式来填充内存。
下面是memtester命令的使用示例:
```shell
memtester 1G
在上述示例中,我们使用memtester命令对1G的内存进行测试。
通过这个命令,memtester会自动选择一种填充模式,并将其应用于内存中。
这样,我们就可以通过memtester命令来填充内存并进行测试。
五、stress命令
stress命令是一个用于测试系统稳定性的工具,它可以通过模拟高负载的情况来测试系统的响应能力。
在stress命令中,我们可以通过指定内存使用量来填充内存。
下面是stress命令的使用示例:
```shell
stress --vm 1 --vm-bytes 1G --vm-hang 0
```
在上述示例中,我们使用stress命令创建了一个使用1G内存的虚拟机,并设置了虚拟机的运行时间为0,即无限运行。
通过这个命令,我们可以将大量的数据填充到内存中,并观察系统的响应情况,以测试系统的稳定性。
六、总结
填充内存是一项常见的任务,它可以用于测试系统性能、检测内存错误等。
本文介绍了几个常用的填充内存的命令,包括memset命令、dd命令、memtester命令和stress命令。
通过这些命令,我们可以方便地进行内存填充操作,并达到我们所需的目的。
在使用这些命
令时,我们需要注意参数的设置,以确保填充内存的效果和结果符合我们的预期。
通过合理使用这些命令,我们可以更好地了解和利用内存,提高计算机系统的性能和稳定性。