




已阅读5页,还剩66页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
变量命名的开头方式boolis charstr Intn longl floatf doubled 全局变量g 指针p 静态变量s 宏命名都要用大写 2的N次方011224384162565121010241665536312147483648 21亿 324294967296 42亿 6392233720368547758086418446744073709551616 二进制表 二进制八进制十进制十六进制000000000000100111001000222001100333010000444010100555011000666011100777100001088100101199101001210A101101311B110001412C110101513D111001614E111101715F 应该记住的ASII码 00149A65a97 这个选项可以改变VC的TAB为空格 以适应和记事本文本对齐一至 这个选项可以改变VC的数字和字符的颜色 可以和变量区分开 可以把警告变成错误 原码 补码 反码 一个正数的三码相同9 00001001一个负数原码 9 10001001反码 9 11110110补码 9 11110111N N补9 9 00001001 11110111 100000000N N反9 9 00001001 11110110 11111111 float的二进制表示方式 895 75895 1101111111 101111111注意这里去掉开头的10 75 110 乘2取11 101111111 1109 127 136 double 1023 136 10001000依次为符号位 指数位 数字位01000100010111111111001000100010111111111000000000000445FF000Float的指数位占8个Double的指数位占11个 先计算 再计算 Printf函数的返回值是int 值是打印的个数 r n也算在内rand 是随即数函数 需要包含 include stdlib h 这个头文件 可以用取余来随即不同的数字 例如rand 10 就是不大于10的随即数 VC里有 int64 可以定义8个字节的整型变量 人类采用十进制是因为人有10个指头 Bug是虫子的意思 最开始是在硬件里找吃硬件的虫子 后来演化成调试程序 ALU是运算器CU是控制器由于磁盘是由磁来判断0和1的 所以可以由改变磁头判断磁的强弱来得知被覆盖的数据 所以美国军方的磁盘标准的销毁方式是反复清0和1共7次 最后研磨成粉 ASMCC 甲骨文古文现代文由此可见是有硬件条件来决定语言的内容丰富程度的冯诺依曼 JOHNVONNEUMANN 第一个制作计算机的人 阿达 ADA 第一个写程序的人 100个苹果 用二进制放到10个箱子里 就可以要多少都能拼出来 用孤独九剑比喻C C JAVA编译语法 用倚天剑来比喻VC6 0 VS2005编译工具 怎样用CL编译程序 上图是CL和LINK的存放位置新建一个a c的程序 在cmd下 键入CLa c c 会生成c obj文件 再用LINK命令LINKa obj生成能a exe文件 CL时可以生成a i的中间文件CLa c c P注意P要大写可以用a exe a txt将打印的东西输出到文本上 变量是对地址的重命名 一个编译器的好坏有三个标准 速度 体积 编译时间小数的存储方式 浮点法和定点法 bool和char占用空间都是1个字节 如果只定义一个变量 就存在内存对齐的问题 其它三个字节都浪费掉 If x 3 这个为真If x 0 这个为假VC里Alt F8可以自动排序goto一般用于跳出多层循环和异常处理 和 可以判断运行 表示短路 可以写短路递归在制作人类性别的程序时 不能用BOOL变量 因为有4种情况 男 女 其他 不详 用log10 函数可以取出一个数有几位 log10 x 1If 后面一定要加 是为了防止加多个分号的宏 很难调试用goto和break编译出的汇编代码是一样的for要用3个goto while要用2个goto do whlie用1个gotogoto的标示一定要用大写的 求素数就象吃坏鸡蛋 吃一口是坏的 就break跳出 system pause 可以暂停CMD程序 函数的调用 传参 传递参数保存返回地址保存寄存器环境申请局部变量的空间 并初始化为cc debug 执行函数体 撤销局部空间恢复寄存器环境回到保存地址平衡参数 栈 代码 栈 代码数据静态变量和全局变量栈局部变量和参数堆申请空间 数组求地址公式typeary x aryaddr sizeof type xInti 5 已知i的首地址是0012FF6C 求i 4 0012FF6C 4 4 0012FF6C 10 十进制是16 0012FF7Ctypeary x y Inti 5 6 已知i的首地址是0012FF08 求i 3 ary x aryaddr sizeof type y x0012FF08 4X6X3 0012FF08 48 十进制是72 0012FF50Inti 5 6 已知i的首地址是0012FF08 求i 3 4 ary x aryaddr sizeof type y x sizeof type y0012FF08 4X6X3 4X4 0012FF08 48 十进制是72 10 十进制是16 0012FF60 可以用sizeof ary sizeof ary 0 来求一维数组中变量的个数硬件设备就是抽象成文件memcpy 拷贝到的地方 数据源 内存块 fflush stdout flushall 清除缓存a 6 5 0 1 2 3 4 第一个元素可以记录数组的个数 xa 10 xff 255 definegetchargetc stdin strlwr转小写strupr转大写strcmp字符比较stricmp字符不区分大小写比较所有的全局变量都是静态变量全局变量的默认值都是0全局变量和静态变量的地址很近寄存器变量registerintn只限于4个字节的变量intchar指针宏断行用 defineforif 0 elsefor带参宏要把参加括号强内聚 低偶合 函数puts输出字符串后自动换行字符的输入输出 getcharputchar字符串的输入输出 getsputs作用域 文件作用域函数作用域进程作用域块作用域在一个函数内定义了一个与全局变量名相同的局部变量 则局部变量有效 全局变量在该函数内不起作用 definepr ary printf ary 定义字符串应用举例 pr 123456789 definefloatf defineF name f name定义源码的拼接应用举例 floatF abcd F abcd 5 13f Ifndefxxxx definexxxx endif xxxx definedebug1 ifdefdebugprintf 调试 endif宏注释 defineIN defineOUTFun INinti OUTintj 两同类型的指针相减 type ptr1 type ptr xptr n int ptr sizeof type n 求文件入口的公式 自己写的 defineB int 0 x00400000int pn NULL pn B B B 15 4 10 4 指针访问内容不一定可以提高速度 和指针贴在一块 p正确 p错误新定义一个指针时要把它定义成NULL 防止误访问代码规范 指针型和NULL比较 整型和0比较CRTL G转到地址处void pa P的地址位移12 数组指针 P的地址位移4 指针数组 用指针排序相对于交换字符串 多于4字节 的排序 他访问慢 先取地址 再找内容 但是排序快 只是交换地址 没有交换内容返回指针值的函数 int fun intx inty 函数的返回值应该是值 不能是地址或是指针 否则有可能溢出函数的指针 int pfn 避免流程嵌套 If funa if funb If funa return0 if funb return0 voidfuna printf funa voidfunb printf funb intmain intargc char argv inti void pfn 2 funa funb for i 0 i 2 i pfn i return0 inta 5 1 2 3 4 5 int p a for p a 5 printf p d r n p p 地址的减法是要除以sizeof的 函数外的指针要想改变 要传指针的指针typea m n type p a 0 a i j p i n j staticchar str how are you char p p str 1 printf s r n p areprintf c r n p a inta 2 3 1 2 3 4 5 6 int p NULL p 这个参数可以增加编译出来程序的命令行参数 这个选项可以改变结构体内存对齐的问题 inta 2 3 1 2 3 4 5 6 int p1 NULL p1 intmain intargc char argv char envp inti for i 0 i argc i printf s r n argv i printf r n while envp NULL puts envp printf r n return0 当遇到错误返回时 return 1 用这种方法返回比较好exit 1 直接这样在c 里局部对象不会析构 fprintf stdio d nsum 可以向屏幕输出nsum的值十六进制的3e7是999 十六进制的3e8是1000在结构体里的变量 尽量加入字符串的描述类型在 c的文件里定义结构体变量必须加入static 而在 cpp里不必加入结构体可以嵌套定义指针可以用VC里新加类的方法来加结构体 因为类和结构体很类似 取结构体公式 成员首地址 成员偏移量 结构体字节对齐 1 pragmapack 1 结构体以一个字节对齐2 pragmapack push 字节对齐数 include x h pragmapack pop 字节对齐数 可以将16进制用字典来表示 0123456789abcdef a 0 下标表示 添加右键菜单 GUI皮肤用法 在Debug里加入dll 加入lib COM用法 可以看到刚才加的事件 然后可以编译一下 这里注意一下加入的是自动生成的名称 工具条的保存位置 汇编笔记 运行状态 文件状态 汇编状态 6 15支持MMX指令集6 14不支持 看ml exe版本 汇编一个com程序命令 debug 反汇编一个com程序命令 u 汇编一个程序 命令 a 可以用汇编语言写入汇编程序 用机械码写入汇编命令 e 显示16进制汇编 d 新建文件 n 修改寄存器 r要输入数值 写入文件 w 这里是写入的大小 运行 g退出 q d不加参数不会读取DS中的数值 d加参数就会读取DS中数值 这段话可以修改DS中的值 8086的16位通用寄存器是 AX BX CX DX SI DI BP SP其中前四个可以分为AH BH CH DH AL BL CL DLAX 累加器 使用频度高 用与算术 逻辑 与外设传送信息BX 基址寄存器 常用做存放储存器的地址CX 计数器DX 数据寄存器SI 源变址寄存器DI 目的变址寄存器 块操作 SP 堆栈指针寄存器BP 基址指针寄存器IP 指令指针寄存器代码段 处理器用CS IP获得下一条要执行的指令堆栈段 处理器用SS SP操作堆栈顶的数据数据段 处理器用DS EA存取数据段的数据附加段 处理器用ES EA存取附加段的数据 8086两数带进位相加 66669999 77778888 CODEMOVAX 9999MOVBX 8888MOVCX 7777MOVDX 6666ADDAX BX 低位相加cfADCDX CX 高位带进位相加MOVBl 0 bx清零ADCBl 0 保存进位位movAX 4c00 退出部分INT21 结束RET 怎样编译asm文件 进入目录 调用ml exe编译asm文件 记得加 c参数 调用link16 exe链接obj文件 生成exe文件 默认名称 按回车 运行查看结果 生成的文件 加法指令 ADD带进位的加法指令 ADC增量指令 INC减法指令 SUB带借位的减法指令 SBB减量指令 DEC求补指令 NEG 串传送 movsb movsw串存储 stosb stosw串读取 lodsb lodsw串比较 cmpsb cmpsw串扫描 scasb scasw重复前缀 rep repz 比较指令 CMP无符号乘积 MUL有符号乘积 IMUL无符号除法 DIV有符号除法 IDIV符号扩展指令 CBW CWD 保护ebp 树立游标 抬高栈 准备放入函数内参数 保护寄存器 函数内参数填int3 函数内参数访问 传入参数访问 函数内参数访问 寄存器弹出 恢复栈 ebp弹出 ebp C调用 栈外平衡 在window下转换成二进制最后两位11是在3环 00零环 没有01和10 汇编环境变量设置 直接编译call函数地址 直接Callapi的情况 普通api的hook修改 CreateWnd的apihook 在RadAsm中更改 还有要把kernel32 lib文件也更改过来 WRK1 2有WINDOWS200380 的源码 假设kernel32有4个分页 程序A加载后操作系统有个记录dll的引用个数和他的分页的表 引用计数加1 当程序B也用到kernel32时 并且分页P3改变了 那操作系统就把分页P3重新在内存中映射一下 成为P5 然后记录这个dll的表中项引用计数加1 表 Dll名称 kernel32引用计数 2A程序 P1 P2 P3 P4B程序 P1 P2 P5 P4 程序加载DLL的操作系统的过程 注入程序 程序A 程序B 程序A找到程序B 远程申请空间C将代码D写入空间C程序A远程创建线程 参数是程序B地址ADDR 空间C 代码D 代码D 地址ADDR API地址ADDR API 问题 当代码Dcopy到空间C时 call的后面要写api的地址 直接写机器码是不行的 不好换算 那么就call一个自定义的变量 关键是要怎么访问g pMsgBox等变量所以 要把代码重定位解决 程序A在注入时获得ADDR API 创建线程前将这个数值写入空间C代码D中 Call 程序A 程序B 代码D 地址Addr A D 变量E 地址Addr A E 代码D 地址Addr B D 变量E 地址Addr B E 空间C 标签地址Addr A 当时地址Addr B 已知Addr A Addr A E Addr B 求Addr B EAddr B Addr A Addr B E Addr A EAddr B Addr A Addr A E Addr B Eebx g pMsgBox g pMsgBox 程序B中的 testeax eax 测试esi是否为0 为0就跳cmpeax 0 用到立即数 多访问了一次xoreax eax 清0moveax 0 用到立即数 多访问了一次 一样 一样 leaesi ebx offsetaddr 相当于movesi ebx offsetaddr 把ebx offsetaddr的所在地址值的传给esi 但是不支持这种mov命令所以就用leaesi ebx offsetaddr 这种方式movesi ebx offsetaddr 是把ebx offsetaddr的所在地址的值传给esi 内存 文件PE转换 导入表 LoadExe要修改 跳表代码 缩小版不可为F 删掉Dos后的结构 txt向上0 x80 导入表 导出表 内存036000是文件034000 导入表地址换算成034000 txt向上0 x80 导入表 导出表 数组和名称对应 反调试 节区的属性 有的虚拟机写的不好 会漏掉节区的属性 这时往常量区写会写不出错在虚拟机里栈的位置不对触发特殊错误 把返回值对比一下调试版堆和非调试版堆是不一样的窗口版的反调 利用PE文件中的节 新建一个节 设置边界值 让窗口版调试器溢出 OD有时候慢 禁用以下插件就好了 内存断点BUG 报出异常的地址已经超出内存断点地址 所以没有断下来 代码执行块 报出异常的地址 内存断点位置 怎么寻找main函数 通常在入口下有3个push的汇编代码 而winmain是有4个pushDebug中有cc初始化 chkesp是比较栈顶的esp的平衡Stdcall如果有输入参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教学教案设计:不玩别针
- 佛山电工考试题及答案
- 项目进度控制精准度保证函(5篇)
- 放射原理考试题及答案
- 法学重要考试题及答案
- 儿童保健考试题及答案
- 产品设计迭代与优化工具集
- 《内燃机的构造与工作原理:高一机械原理教案》
- (正式版)DB15∕T 3368-2024 《沙冬青种子生产技术规程》
- 电缆证考试题及答案
- 第一课 踏上强国之路 公开课一等奖创新教案 统编版道德与法治九年级上册
- 2025年中级注册安全工程师《金属非金属矿山安全实务》考试真题及答案
- 2025年职业卫生标准试题及答案
- 2025部编版八年级历史上册 第二单元 早期现代化的初步探索和民族危机加剧(大单元教学设计)
- 药械知识培训计划课件
- 2025年气瓶检验员闭卷考试题库及答案
- 2025-2026学年人教版(2024)初中数学七年级上册教学计划及进度表
- 医院环境感染监测制度
- 医院新项目创新建设汇报
- 部编版新教材道德与法治二年级上册《5. 这是我们班》教案
- 滴滴认证考试题库及答案
评论
0/150
提交评论