裸函数
函数体内没有任何代码的函数
但是. 编译后的汇编代码还是会 进行压栈,填充数据,保护现场
恢复现场等操作
练习
需要熟悉堆栈结构,参数,局部变量的位置. 返回值的存储位置
调用约定
不同调用的 堆栈平衡,参数压栈 都是谁来做
win os 中使用的是 stdcal 的方式 对函数进行编译
ret 8
ret 8. 相当于 ret esp + 8.
在函数结束时,esp 出栈8个字节. 俩个内存单元.
程序入口
main 方法是 KERNEL.7c816d4f 进行调用. 调用了 mainCRTstartup
在调用了 main 方法.
真正的函数入口是 main
修改入口点
修改后的结果.
mainCRTStartup() 被拦截了 . 但做了很多工作
找到上面 函数之后,在找到一个 有三个参数的函数. 就是main 入口函数
数据类型
数据类型在汇编中是怎样表示
包括了存储格式和数据宽度
符号数据
有符号数和无符号数
jle: 小于等于
jbe: 大于等于
浮点数
整数
整数部分转为 二进制数.
小数
小数部分 乘 2. 知道尾数为0为止
科学计数
整数和小数部分组合: 1100.1. 在使用科学计数法表示这个数字
1100.1 == 1.1001 * 10^3. 这里的指数是3
浮点数格式
0: 符号位. 正数的话值为0. 负数值为1
00000000: 8位指数为
0000 0000 0000 0000 0000 000: 23位数据位
这时
将科学计数法的小数部分存入到 数据位
0 0000 0000 1001 0000 0000 0000 0000 000
另外
127 + x. x代表 指数. 如果指数是3,那么x就是3.指数是-3,x就是-3
计算
这里的 127 + 3= 130 == 0x82 == 1000 0010
之后,将 得出来的数字放到指数位即可
0 1000 0010 1001 0000 0000 0000 0000 000
最后,浮点数存储遵守 IEEE 规范
编码
将字符,汉字等转为 编码形式的数字,进行存储
ASCII
GB2312
GB2312-80
将俩个8位字节==16字节 存放一个字
ASCII 字节最高位都是0 GB2312最高位都是 1
那么将数据读取出来的时候,去查对应的表.
乱码
一些编码 别的国家也在用. 就会产生乱码问题
数组