移位与内存分配
移位
- 算术移位
- 逻辑移位
- 循环移位
算术移位
逻辑移位
循环移位
带进位的循环移位指令
练习
- 定义一个unsiged char 类型,通过程序为第3、5、7位赋值,赋值时不能影响到其它位原来的值.(使用位操作指令、比如:& | ! ^ << >>等)
- 判断某个位的值是否为1. (使用位操作指令、比如:& | ! ^ << >>等)
- 取第7、6、5位的值,以十进制显示(unsigned).(使用位操作指令、比如:& | ! ^ << >>等)
- 用十六进制文本编辑器分别打开一个.exe、.dll、.sys、.txt、.doc .jpg、.pdf等将前四个字节写在下了.
- 将一个在十六进制编辑器中打开的.exe文件,拖拽到最后,观察文件中的大小和硬盘上的大小.
习题1解答
1 | void test() |
后来我想了下,这种方法根本不通用,就想了别的办法
1 | int test(int num, int i, int set) |
这个i是第n位,而set是要设置的值,这个是通用的,8位数据可以用这个
习题2解答
1 | int test1(int num, int i) |
习题3解答
1 | int test2(int num, int i) |
习题4解答
类型 | 字节 |
---|---|
exe | 4d5a5000 |
txt | CEE1B0AE |
dll | 4D5A9000 |
png | 89504E47 |
25504446 | |
doc | 504B0304 |
发觉exe跟dll相对比较吻合,而其余都是不同的
习题5解答
发觉文件中的大小,跟硬盘上的大小只差那个几个字节,只有4个字节左右的差异
内存分配与文件读写
练习
- 用十六进制文本编辑器,打开一个记事本的.exe文件,再打开在内存中的记事本进程,记录下这两个文件的不同.
- 将记事本的.exe文件读取到内存,并返回读取后在内存中的地址.
- 将内存中的数据存储到一个文件中,(.exe格式),然后双击打开,看是否能够使用.
习题1解答
- 发觉这两个相同的部分只有文件开头部分,后面的都是很多不同的了
- 地址全部是不同的,一个以0为基础,一个以0x400000为基础
习题2+3解答
1 |
|
其实也不难,就是简单的读写,注意,rb+ 和wb+才能成功,要以二进制流的形式读写,练习3的答案,能打开,因为写了后也是一样的文件
本文作者:NoOne
本文地址: https://noonegroup.xyz/posts/1f1233d7/
版权声明:转载请注明出处!