12_C语言06_switch语句反汇编 switch语句反汇编 测试环境:VC++6.0 分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表. 会建立一张表,表里面存的各个分支语句函数的地址,然后来索引. case后面的常量可以是无序的,并不影响大表的生成. 代码分析 5: switch(x) 6: { 0040D728 mov eax,dword ptr [ebp+8] ;将参数3放到eax中 0040D72B mov dword ptr…
1.指针数组 5: char* keyword[] = {"if", "for", "while", "switch"}; //数组指针,大小为4×4=16字节 0040D7D8 mov dword ptr [ebp-10h],offset string "AAA" (00422028) 0040D7DF mov dword ptr [ebp-0Ch],offset string "for&quo…
1."带*类型"的特征探测 宽度 在同一个平台下,任何指针变量的尺寸都是一样的(都等于系统字长),如在32位平台中任何类型指针宽度都是32位. 声明 1.带有* 的变量类型的标准写法:变量类型* 变量名 2.任何类型都可以带* 加上* 以后是新的类型 3.*可以是任意多个 赋值:相同类型赋值 范例:int* a = (int*)666; ++ -- 或 加上/减去 一个整数 规则:以指针指向的变量为步长,进行步长倍数的加减操作 求差值 规则:作差后除以步长 两个类型相同的一级指针相减,…
1.汇编中的移位指令 算数移位指令 指令格式:SAL/SAR Reg/Mem, CL/Imm SAL(Shift Arithmetic Left):算数左移 SAR(Shift Arithmetic Right):算数右移 逻辑移位指令 指令格式:SHL/SHR Reg/Mem, CL/Imm SHL(Shift Left):逻辑左移 SHR(Shift Right):逻辑右移 循环移位指令 指令格式:ROL r/m, i8 ROR r/m, CL ROL(Rotate Left):循环左移 R…
#define 无参数的宏定义的一般形式为:#define 标识符 字符序列 如:#define TRUE 1 注意事项: 1.之作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到预处理之后的编译阶段才能发现 带参数宏定义:#define 标识符(参数表)字符序列 如:#define MAX(A, B) ((A) > (B)?(A):(B)) 代码 x = MAX(p, q)将被替换成 y = (p) > (q)? (p):(q) 注意: 1.宏名标识符与左圆括号之间不允许…
结构体小结 结构体是按照分配的大小,局部变量会自动数据对齐 1字节对齐,省空间,但cpu查找效率低 4字节对齐,不省空间,但cpu查找效率高 VC6默认的结构对齐大小 项目右键-> setting-> C/C++ ->Code Generation 如果这个值比结构体成员的sizeof值小,那么该成员的偏移量应该以此为准, 即,结构体成员的偏移量应该取二者的最小值 对齐原则 原则一:数据成员对齐规则:结构的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置…
前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙著<品悟C>已经全面揭露了谭浩强书中的种种错谬,因此,下面视频中凡是谭浩强原来就有的错误,就只标出不细解了.重点讲小甲鱼自己创造的“亮点”.各位网友如对只标出而未解释的地方有疑问,可在评论中提出,我再详细解释. 下面截图来自“视频专辑:零基础学习C语言(小甲鱼版)”第二集.从这一集我们可以清楚地看…
向代码节添加代码实现 作者经过一周不断的失败,再思考以及无数次调试终于实现. 思路:八个步骤 1. 文件拷到文件缓冲区(FileBuffer) //图示见(零基础逆向工程18之PE加载过程) 2. 文件缓冲区扩展到内存映像缓冲区(ImageBuffer) 3. 判断代码空闲区是否有足够空间存储ShellCode代码 4. 将代码复制到空闲区 5. 修正E8 6. 修正E9 7. 修改OEP 8. 内存映像缓冲区到新文件缓冲区(NewBuffer) 9. 新文件缓冲区到文件 向其他节(如数据段)空…
今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示:   图1-1 C语言的发展历程 1.2 C语言的特点 C语言是一种通用的程序设计语言,语言本身简洁.灵活.表达能力强,被广泛用于系统软件和应用软件的开发,并且具有良好的可移植性. C语言的特点可概括如下: (1)简洁.紧凑.灵活.C语言的核心内容很少,只有32个关键字,9种控制语句;程序书写格式…
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 s…