b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

unicode字符n 《逆向分析实战》数据的存储及表示形式(5)

电脑杂谈  发布时间:2018-01-12 02:12:11  来源:网络整理

在地址0040300C处的值是11 22 33 44,这4个值分别是我们定义b1、b2、b3和b4 4个字节型的变量,这4变量按照内存由低到高的顺序显示分别是11、22、33、44。

在地址00403010处显示的值是66 55 88 77,这4个值分别对应我们定义的w1和w2两个字型变量,但是我们定义的变量w1的值是5566h,w2的值是7788h,在内存中为何显示的是6655和8877呢?这就是我们提到过的字节顺序的问题。我们的主机采用的是小尾方式存储的数据,也就是数据的低位存放在内存的低地址中,数据的高位存放在内存的高地址中,因此在地址00403020中存放的是5566H的低位数据66,在地址00403021中存放的是5566H的高位数据55,在内存看时,顺序是相反的。

在地址00403014处存放的是78 56 34 12,这是我们定义的最后一个变量d,它也是按照小尾方式存储在内存中的。因此,在查看内存时顺序也是反的。

unicode字符是什么_python字符转ascii_unicode字符n

OD提供了多种查看内存数据的方式,通过在数据窗口中单击鼠标右键,会弹出如图1-6所示菜单。

图1-6查看数据方式的菜单选项

图1-7OD中对数据操作的菜单

4.通过命令窗口改变数据窗口显示方式

在上面代码中定义变量时,使用了db、dw和dd三种类型,在OD的命令窗口中也同样可以使用者3个命令,其格式分别如表1-7所列。

将表1-7中的命令在命令窗口中进行输入,数据窗口的变化和数值显示的变化分别如图1-8、图1-9和图1-10所示。

图1-8dd命令显示的数据窗口

图1-9dw命令显示的数据窗口

图1-10db命令显示的数据窗口

从图中可以看出不同方式下数据窗口显示的样式,但是无论使用哪种方式显示数据,地址列总是会显示在最前面的,只要我们知道数据的地址,就可以直接在命令窗口中输入显示数据的格式来查看指定内存中的数据。

1.4编程判断主机字符序

编程判断主机字节序是更进一步掌握字节序的方式,本小节给出两种对主机的字节序进行判断的方式。

1.4.1字节序相关函数

在TCP/IP网络编程中会涉及关于字节序的函数,TCP/IP协议中传递数据是以网络字节序进行传输的,网络字节序是指网络传输相关协议所规定的字节传输的顺序,TCP/IP协议所使用的网络字节序与大尾方式相同。而主机字节序包含大尾方式与小尾方式,因此在进行网络传输时会进行相应的判断,如果主机字节序是大尾方式则无需进行转换即可传输,如果主机字节序是小尾方式则需要转换成网络字节序(也就是转换成大尾方式)然后进行传输。

常用的字节序涉及的函数有如下几个:

在这4个函数中,前两个是将主机字节序转换成网络字节序,后两个是将网络字节序转换为主机字节序。关于更多的字节序的函数可参考MSDN。

1.4.2编程判断主机字节序

“编程判断主机字节序”是很多杀毒软件公司或者安全开发职位的一道面试题,因为这个题目比较基础。通过前面的知识,相信读者能够很容易地实现该程序。这里给出笔者自己对于该题目的实现方法。笔者认为,完成该题目有两种方法,第一种方法是“取值比较法”,第二种方法是“直接转换比较法”。

1.取值比较法

所谓取值比较法,是首先定义一个4字节的十六进制数。因为使用调试器查看内存最直观的就是十六进制,所以定义十六进制数是一个操作起来比较直观的方法。而后通过指针方式取出这个十六进制数在“内存”中的某一个字节,最后与实际数值中相对应的数进行比较。

由于字节序的原因,内存中的某字节与实际数值中对应的字节可能不相同,这样就可以确定字节序了。

代码如下:

以上代码中,定义了0x01020304这个十六进制数,其在小尾方式内存中的存储顺序为04 03 02 01。取(BYTE)&dwSmallNum内存中的低地址位的值,如果是小尾方式的话,那么低地址存储的值为0x04;如果是大尾方式的话,则低地址存储的值为0x01。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-59929-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...