程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 #
|
|
- 尉影 杨
- 5 years ago
- Views:
Transcription
1 程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 #define _SIZE_T 10 typedef unsigned int size_t; 11 #endif extern char * strerror(int errno); /* 16 * This string-include defines all string functions as inline 17 * functions. Use gcc. It also assumes ds=es=data space, this should be 18 * normal. Most of the string-functions are rather heavily hand-optimized, 19 * see especially strtok,strstr,str[c]spn. They should work, but are not 20 * very easy to understand. Everything is done entirely within the register 21 * set, making the functions fast and clean. String instructions have been 22 * used through-out, making for "slightly" unclear code :-) 23 * 24 * (C) 1991 Linus Torvalds 25 */ /* * 这个字符串头文件以内嵌函数的形式定义了所有字符串操作函数 使用 gcc 时, 同时 * 假定了 ds=es= 数据空间, 这应该是常规的 绝大多数字符串函数都是经手工进行大量 * 优化的, 尤其是函数 strtok strstr str[c]spn 它们应该能正常工作, 但却不是那 * 么容易理解 所有的操作基本上都是使用寄存器集来完成的, 这使得函数即快又整洁 * 所有地方都使用了字符串指令, 这又使得代码 稍微 难以理解 * * (C) 1991 Linus Torvalds */ 26 //// 将一个字符串 (src) 拷贝到另一个字符串 (dest), 直到遇到 NULL 字符后停止 // 参数 :dest - 目的字符串指针,src - 源字符串指针 // %0 - esi(src),%1 - edi(dest) 27 extern inline char * strcpy(char * dest,const char *src) 28 { 29 asm ("cld\n" // 清方向位 30 "1:\tlodsb\n\t" // 加载 DS:[esi] 处 1 字节 al, 并更新 esi 31 "stosb\n\t" // 存储字节 al ES:[edi], 并更新 edi 32 "testb %%al,%%al\n\t" // 刚存储的字节是 0? 33 "jne 1b" // 不是则向后跳转到标号 1 处, 否则结束 34 ::"S" (src),"d" (dest):"si","di","ax"); 35 return dest; // 返回目的字符串指针 36 } 37 //// 拷贝源字符串 count 个字节到目的字符串 // 如果源串长度小于 count 个字节, 就附加空字符 (NULL) 到目的字符串 // 参数 :dest - 目的字符串指针,src - 源字符串指针,count - 拷贝字节数
2 // %0 - esi(src),%1 - edi(dest),%2 - ecx(count) 38 extern inline char * strncpy(char * dest,const char *src,int count) 39 { 40 asm ("cld\n" // 清方向位 41 "1:\tdecl %2\n\t" // 寄存器 ecx--(count--) 42 "js 2f\n\t" // 如果 count<0 则向前跳转到标号 2, 结束 43 "lodsb\n\t" // 取 ds:[esi] 处 1 字节 al, 并且 esi++ 44 "stosb\n\t" // 存储该字节 es:[edi], 并且 edi++ 45 "testb %%al,%%al\n\t" // 该字节是 0? 46 "jne 1b\n\t" // 不是, 则向前跳转到标号 1 处继续拷贝 47 "rep\n\t" // 否则, 在目的串中存放剩余个数的空字符 48 "stosb\n" 49 "2:" 50 ::"S" (src),"d" (dest),"c" (count):"si","di","ax","cx"); 51 return dest; // 返回目的字符串指针 52 } 53 //// 将源字符串拷贝到目的字符串的末尾处 // 参数 :dest - 目的字符串指针,src - 源字符串指针 // %0 - esi(src),%1 - edi(dest),%2 - eax(0),%3 - ecx(-1) 54 extern inline char * strcat(char * dest,const char * src) 55 { 56 asm ("cld\n\t" // 清方向位 57 "repne\n\t" // 比较 al 与 es:[edi] 字节, 并更新 edi++, 58 "scasb\n\t" // 直到找到目的串中是 0 的字节, 此时 edi 已指向后 1 字节 59 "decl %1\n" // 让 es:[edi] 指向 0 值字节 60 "1:\tlodsb\n\t" // 取源字符串字节 ds:[esi] al, 并 esi++ 61 "stosb\n\t" // 将该字节存到 es:[edi], 并 edi++ 62 "testb %%al,%%al\n\t" // 该字节是 0? 63 "jne 1b" // 不是, 则向后跳转到标号 1 处继续拷贝, 否则结束 64 ::"S" (src),"d" (dest),"a" (0),"c" (0xffffffff):"si","di","ax","cx"); 65 return dest; // 返回目的字符串指针 66 } 67 //// 将源字符串的 count 个字节复制到目的字符串的末尾处, 最后添一空字符 // 参数 :dest - 目的字符串,src - 源字符串,count - 欲复制的字节数 // %0 - esi(src),%1 - edi(dest),%2 - eax(0),%3 - ecx(-1),%4 - (count) 68 extern inline char * strncat(char * dest,const char * src,int count) 69 { 70 asm ("cld\n\t" // 清方向位 71 "repne\n\t" // 比较 al 与 es:[edi] 字节,edi++ 72 "scasb\n\t" // 直到找到目的串的末端 0 值字节 73 "decl %1\n\t" // edi 指向该 0 值字节 74 "movl %4,%3\n" // 欲复制字节数 ecx 75 "1:\tdecl %3\n\t" // ecx--( 从 0 开始计数 ) 76 "js 2f\n\t" // ecx <0?, 是则向前跳转到标号 2 处 77 "lodsb\n\t" // 否则取 ds:[esi] 处的字节 al,esi++ 78 "stosb\n\t" // 存储到 es:[edi] 处,edi++ 79 "testb %%al,%%al\n\t" // 该字节值为 0? 80 "jne 1b\n" // 不是则向后跳转到标号 1 处, 继续复制 81 "2:\txorl %2,%2\n\t" // 将 al 清零 82 "stosb" // 存到 es:[edi] 处 83 ::"S" (src),"d" (dest),"a" (0),"c" (0xffffffff),"g" (count)
3 84 :"si","di","ax","cx"); 85 return dest; // 返回目的字符串指针 86 } 87 //// 将一个字符串与另一个字符串进行比较 // 参数 :cs - 字符串 1,ct - 字符串 2 // %0 - eax( res) 返回值,%1 - edi(cs) 字符串 1 指针,%2 - esi(ct) 字符串 2 指针 // 返回 : 如果串 1 > 串 2, 则返回 1; 串 1 = 串 2, 则返回 0; 串 1 < 串 2, 则返回 -1 // 第 90 行定义了一个局部寄存器变量 该变量将被保存在 eax 寄存器中, 以便于高效访问和操作 // 这种定义变量的方法主要用于内嵌汇编程序中 详细说明参见 gcc 手册 指定寄存器中的变量 88 extern inline int strcmp(const char * cs,const char * ct) 89 { 90 register int res asm ("ax"); // res 是寄存器变量 (eax) 91 asm ("cld\n" // 清方向位 92 "1:\tlodsb\n\t" // 取字符串 2 的字节 ds:[esi] al, 并且 esi++ 93 "scasb\n\t" // al 与字符串 1 的字节 es:[edi] 作比较, 并且 edi++ 94 "jne 2f\n\t" // 如果不相等, 则向前跳转到标号 2 95 "testb %%al,%%al\n\t" // 该字节是 0 值字节吗 ( 字符串结尾 )? 96 "jne 1b\n\t" // 不是, 则向后跳转到标号 1, 继续比较 97 "xorl %%eax,%%eax\n\t" // 是, 则返回值 eax 清零, 98 "jmp 3f\n" // 向前跳转到标号 3, 结束 99 "2:\tmovl $1,%%eax\n\t" // eax 中置 "jl 3f\n\t" // 若前面比较中串 2 字符 < 串 1 字符, 则返回正值结束 101 "negl %%eax\n" // 否则 eax = -eax, 返回负值, 结束 102 "3:" 103 :"=a" ( res):"d" (cs),"s" (ct):"si","di"); 104 return res; // 返回比较结果 105 } 106 //// 字符串 1 与字符串 2 的前 count 个字符进行比较 // 参数 :cs - 字符串 1,ct - 字符串 2,count - 比较的字符数 // %0 - eax( res) 返回值,%1 - edi(cs) 串 1 指针,%2 - esi(ct) 串 2 指针,%3 - ecx(count) // 返回 : 如果串 1 > 串 2, 则返回 1; 串 1 = 串 2, 则返回 0; 串 1 < 串 2, 则返回 extern inline int strncmp(const char * cs,const char * ct,int count) 108 { 109 register int res asm ("ax"); // res 是寄存器变量 (eax) 110 asm ("cld\n" // 清方向位 111 "1:\tdecl %3\n\t" // count "js 2f\n\t" // 如果 count<0, 则向前跳转到标号 "lodsb\n\t" // 取串 2 的字符 ds:[esi] al, 并且 esi "scasb\n\t" // 比较 al 与串 1 的字符 es:[edi], 并且 edi "jne 3f\n\t" // 如果不相等, 则向前跳转到标号 "testb %%al,%%al\n\t" // 该字符是 NULL 字符吗? 117 "jne 1b\n" // 不是, 则向后跳转到标号 1, 继续比较 118 "2:\txorl %%eax,%%eax\n\t" // 是 NULL 字符, 则 eax 清零 ( 返回值 ) 119 "jmp 4f\n" // 向前跳转到标号 4, 结束 120 "3:\tmovl $1,%%eax\n\t" // eax 中置 "jl 4f\n\t" // 如果前面比较中串 2 字符 < 串 1 字符, 则返回 1 结束 122 "negl %%eax\n" // 否则 eax = -eax, 返回负值, 结束 123 "4:" 124 :"=a" ( res):"d" (cs),"s" (ct),"c" (count):"si","di","cx"); 125 return res; // 返回比较结果 126 }
4 127 //// 在字符串中寻找第一个匹配的字符 // 参数 :s - 字符串,c - 欲寻找的字符 // %0 - eax( res),%1 - esi( 字符串指针 s),%2 - eax( 字符 c) // 返回 : 返回字符串中第一次出现匹配字符的指针 若没有找到匹配的字符, 则返回空指针 128 extern inline char * strchr(const char * s,char c) 129 { 130 register char * res asm ("ax"); // res 是寄存器变量 (eax) 131 asm ("cld\n\t" // 清方向位 132 "movb %%al,%%ah\n" // 将欲比较字符移到 ah 133 "1:\tlodsb\n\t" // 取字符串中字符 ds:[esi] al, 并且 esi "cmpb %%ah,%%al\n\t" // 字符串中字符 al 与指定字符 ah 相比较 135 "je 2f\n\t" // 若相等, 则向前跳转到标号 2 处 136 "testb %%al,%%al\n\t" // al 中字符是 NULL 字符吗?( 字符串结尾?) 137 "jne 1b\n\t" // 若不是, 则向后跳转到标号 1, 继续比较 138 "movl $1,%1\n" // 是, 则说明没有找到匹配字符,esi 置 "2:\tmovl %1,%0\n\t" // 将指向匹配字符后一个字节处的指针值放入 eax 140 "decl %0" // 将指针调整为指向匹配的字符 141 :"=a" ( res):"s" (s),"0" (c):"si"); 142 return res; // 返回指针 143 } 144 //// 寻找字符串中指定字符最后一次出现的地方 ( 反向搜索字符串 ) // 参数 :s - 字符串,c - 欲寻找的字符 // %0 - edx( res),%1 - edx(0),%2 - esi( 字符串指针 s),%3 - eax( 字符 c) // 返回 : 返回字符串中最后一次出现匹配字符的指针 若没有找到匹配的字符, 则返回空指针 145 extern inline char * strrchr(const char * s,char c) 146 { 147 register char * res asm ("dx"); // res 是寄存器变量 (edx) 148 asm ("cld\n\t" // 清方向位 149 "movb %%al,%%ah\n" // 将欲寻找的字符移到 ah 150 "1:\tlodsb\n\t" // 取字符串中字符 ds:[esi] al, 并且 esi "cmpb %%ah,%%al\n\t" // 字符串中字符 al 与指定字符 ah 作比较 152 "jne 2f\n\t" // 若不相等, 则向前跳转到标号 2 处 153 "movl %%esi,%0\n\t" // 将字符指针保存到 edx 中 154 "decl %0\n" // 指针后退一位, 指向字符串中匹配字符处 155 "2:\ttestb %%al,%%al\n\t" // 比较的字符是 0 吗 ( 到字符串尾 )? 156 "jne 1b" // 不是则向后跳转到标号 1 处, 继续比较 157 :"=d" ( res):"0" (0),"S" (s),"a" (c):"ax","si"); 158 return res; // 返回指针 159 } 160 //// 在字符串 1 中寻找第 1 个字符序列, 该字符序列中的任何字符都包含在字符串 2 中 // 参数 :cs - 字符串 1 指针,ct - 字符串 2 指针 // %0 - esi( res),%1 - eax(0),%2 - ecx(-1),%3 - esi( 串 1 指针 cs),%4 - ( 串 2 指针 ct) // 返回字符串 1 中包含字符串 2 中任何字符的首个字符序列的长度值 161 extern inline int strspn(const char * cs, const char * ct) 162 { 163 register char * res asm ("si"); // res 是寄存器变量 (esi) 164 asm ("cld\n\t" // 清方向位 165 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 166 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 )
5 168 "notl %%ecx\n\t" // ecx 中每位取反 169 "decl %%ecx\n\t" // ecx--, 得串 2 的长度值 170 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 171 "1:\tlodsb\n\t" // 取串 1 字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符等于 0 值吗 ( 串 1 结尾 )? 173 "je 2f\n\t" // 如果是, 则向前跳转到标号 2 处 174 "movl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 175 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 176 "repne\n\t" // 比较 al 与串 2 中字符 es:[edi], 并且 edi "scasb\n\t" // 如果不相等就继续比较 178 "je 1b\n" // 如果相等, 则向后跳转到标号 1 处 179 "2:\tdecl %0" // esi--, 指向最后一个包含在串 2 中的字符 180 :"=S" ( res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) 181 :"ax","cx","dx","di"); 182 return res-cs; // 返回字符序列的长度值 183 } 184 //// 寻找字符串 1 中不包含字符串 2 中任何字符的首个字符序列 // 参数 :cs - 字符串 1 指针,ct - 字符串 2 指针 // %0 - esi( res),%1 - eax(0),%2 - ecx(-1),%3 - esi( 串 1 指针 cs),%4 - ( 串 2 指针 ct) // 返回字符串 1 中不包含字符串 2 中任何字符的首个字符序列的长度值 185 extern inline int strcspn(const char * cs, const char * ct) 186 { 187 register char * res asm ("si"); // res 是寄存器变量 (esi) 188 asm ("cld\n\t" // 清方向位 189 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 190 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 ) 192 "notl %%ecx\n\t" // ecx 中每位取反 193 "decl %%ecx\n\t" // ecx--, 得串 2 的长度值 194 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 195 "1:\tlodsb\n\t" // 取串 1 字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符等于 0 值吗 ( 串 1 结尾 )? 197 "je 2f\n\t" // 如果是, 则向前跳转到标号 2 处 198 "movl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 199 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 200 "repne\n\t" // 比较 al 与串 2 中字符 es:[edi], 并且 edi "scasb\n\t" // 如果不相等就继续比较 202 "jne 1b\n" // 如果不相等, 则向后跳转到标号 1 处 203 "2:\tdecl %0" // esi--, 指向最后一个包含在串 2 中的字符 204 :"=S" ( res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) 205 :"ax","cx","dx","di"); 206 return res-cs; // 返回字符序列的长度值 207 } 208 //// 在字符串 1 中寻找首个包含在字符串 2 中的任何字符 // 参数 :cs - 字符串 1 的指针,ct - 字符串 2 的指针 // %0 -esi( res),%1 -eax(0),%2 -ecx(0xffffffff),%3 -esi( 串 1 指针 cs),%4 -( 串 2 指针 ct) // 返回字符串 1 中首个包含字符串 2 中字符的指针 209 extern inline char * strpbrk(const char * cs,const char * ct) 210 { 211 register char * res asm ("si"); // res 是寄存器变量 (esi) 212 asm ("cld\n\t" // 清方向位
6 213 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 214 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 ) 216 "notl %%ecx\n\t" // ecx 中每位取反 217 "decl %%ecx\n\t" // ecx--, 得串 2 的长度值 218 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 219 "1:\tlodsb\n\t" // 取串 1 字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符等于 0 值吗 ( 串 1 结尾 )? 221 "je 2f\n\t" // 如果是, 则向前跳转到标号 2 处 222 "movl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 223 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 224 "repne\n\t" // 比较 al 与串 2 中字符 es:[edi], 并且 edi "scasb\n\t" // 如果不相等就继续比较 226 "jne 1b\n\t" // 如果不相等, 则向后跳转到标号 1 处 227 "decl %0\n\t" // esi--, 指向一个包含在串 2 中的字符 228 "jmp 3f\n" // 向前跳转到标号 3 处 229 "2:\txorl %0,%0\n" // 没有找到符合条件的, 将返回值为 NULL 230 "3:" 231 :"=S" ( res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) 232 :"ax","cx","dx","di"); 233 return res; // 返回指针值 234 } 235 //// 在字符串 1 中寻找首个匹配整个字符串 2 的字符串 // 参数 :cs - 字符串 1 的指针,ct - 字符串 2 的指针 // %0 -eax( res),%1 -eax(0),%2 -ecx(0xffffffff),%3 -esi( 串 1 指针 cs),%4 -( 串 2 指针 ct) // 返回 : 返回字符串 1 中首个匹配字符串 2 的字符串指针 236 extern inline char * strstr(const char * cs,const char * ct) 237 { 238 register char * res asm ("ax"); // res 是寄存器变量 (eax) 239 asm ("cld\n\t" \ // 清方向位 240 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 241 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 ) 243 "notl %%ecx\n\t" // ecx 中每位取反 244 "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ /* 注意! 如果搜索串为空, 将设置 Z 标志 */ // 得串 2 的长度值 245 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 246 "1:\tmovl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 247 "movl %%esi,%%eax\n\t" // 将串 1 的指针复制到 eax 中 248 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 249 "repe\n\t" // 比较串 1 和串 2 字符 (ds:[esi],es:[edi]),esi++,edi "cmpsb\n\t" // 若对应字符相等就一直比较下去 251 "je 2f\n\t" /* also works for empty string, see above */ /* 对空串同样有效, 见上面 */ // 若全相等, 则转到标号 "xchgl %%eax,%%esi\n\t" // 串 1 头指针 esi, 比较结果的串 1 指针 eax 253 "incl %%esi\n\t" // 串 1 头指针指向下一个字符 254 "cmpb $0,-1(%%eax)\n\t" // 串 1 指针 (eax-1) 所指字节是 0 吗? 255 "jne 1b\n\t" // 不是则转到标号 1, 继续从串 1 的第 2 个字符开始比较 256 "xorl %%eax,%%eax\n\t" // 清 eax, 表示没有找到匹配 257 "2:" 258 :"=a" ( res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct) 259 :"cx","dx","di","si");
7 260 return res; // 返回比较结果 261 } 262 //// 计算字符串长度 // 参数 :s - 字符串 // %0 - ecx( res),%1 - edi( 字符串指针 s),%2 - eax(0),%3 - ecx(0xffffffff) // 返回 : 返回字符串的长度 263 extern inline int strlen(const char * s) 264 { 265 register int res asm ("cx"); // res 是寄存器变量 (ecx) 266 asm ("cld\n\t" // 清方向位 267 "repne\n\t" // al(0) 与字符串中字符 es:[edi] 比较, 268 "scasb\n\t" // 若不相等就一直比较 269 "notl %0\n\t" // ecx 取反 270 "decl %0" // ecx--, 得字符串得长度值 271 :"=c" ( res):"d" (s),"a" (0),"0" (0xffffffff):"di"); 272 return res; // 返回字符串长度值 273 } extern char * strtok; // 用于临时存放指向下面被分析字符串 1(s) 的指针 276 //// 利用字符串 2 中的字符将字符串 1 分割成标记 (tokern) 序列 // 将串 1 看作是包含零个或多个单词 (token) 的序列, 并由分割符字符串 2 中的一个或多个字符 // 分开 第一次调用 strtok() 时, 将返回指向字符串 1 中第 1 个 token 首字符的指针, 并在返 // 回 token 时将一 null 字符写到分割符处 后续使用 null 作为字符串 1 的调用, 将用这种方 // 法继续扫描字符串 1, 直到没有 token 为止 在不同的调用过程中, 分割符串 2 可以不同 // 参数 :s - 待处理的字符串 1,ct - 包含各个分割符的字符串 2 // 汇编输出 :%0 - ebx( res),%1 - esi( strtok); // 汇编输入 :%2 - ebx( strtok),%3 - esi( 字符串 1 指针 s),%4 - ( 字符串 2 指针 ct) // 返回 : 返回字符串 s 中第 1 个 token, 如果没有找到 token, 则返回一个 null 指针 // 后续使用字符串 s 指针为 null 的调用, 将在原字符串 s 中搜索下一个 token 277 extern inline char * strtok(char * s,const char * ct) 278 { 279 register char * res asm ("si"); 280 asm ("testl %1,%1\n\t" // 首先测试 esi( 字符串 1 指针 s) 是否是 NULL 281 "jne 1f\n\t" // 如果不是, 则表明是首次调用本函数, 跳转标号 "testl %0,%0\n\t" // 若是 NULL, 表示此次是后续调用, 测 ebx( strtok) 283 "je 8f\n\t" // 如果 ebx 指针是 NULL, 则不能处理, 跳转结束 284 "movl %0,%1\n" // 将 ebx 指针复制到 esi 285 "1:\txorl %0,%0\n\t" // 清 ebx 指针 286 "movl $-1,%%ecx\n\t" // 置 ecx = 0xffffffff 287 "xorl %%eax,%%eax\n\t" // 清零 eax 288 "cld\n\t" // 清方向位 289 "movl %4,%%edi\n\t" // 下面求字符串 2 的长度 edi 指向字符串 "repne\n\t" // 将 al(0) 与 es:[edi] 比较, 并且 edi "scasb\n\t" // 直到找到字符串 2 的结束 null 字符, 或计数 ecx==0 292 "notl %%ecx\n\t" // 将 ecx 取反, 293 "decl %%ecx\n\t" // ecx--, 得到字符串 2 的长度值 294 "je 7f\n\t" /* empty delimeter-string */ /* 分割符字符串空 */ // 若串 2 长度为 0, 则转标号 "movl %%ecx,%%edx\n" // 将串 2 长度暂存入 edx 296 "2:\tlodsb\n\t" // 取串 1 的字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符为 0 值吗 ( 串 1 结束 )?
8 298 "je 7f\n\t" // 如果是, 则跳转标号 "movl %4,%%edi\n\t" // edi 再次指向串 2 首 300 "movl %%edx,%%ecx\n\t" // 取串 2 的长度值置入计数器 ecx 301 "repne\n\t" // 将 al 中串 1 的字符与串 2 中所有字符比较, 302 "scasb\n\t" // 判断该字符是否为分割符 303 "je 2b\n\t" // 若能在串 2 中找到相同字符 ( 分割符 ), 则跳转标号 "decl %1\n\t" // 若不是分割符, 则串 1 指针 esi 指向此时的该字符 305 "cmpb $0,(%1)\n\t" // 该字符是 NULL 字符吗? 306 "je 7f\n\t" // 若是, 则跳转标号 7 处 307 "movl %1,%0\n" // 将该字符的指针 esi 存放在 ebx 308 "3:\tlodsb\n\t" // 取串 1 下一个字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符是 NULL 字符吗? 310 "je 5f\n\t" // 若是, 表示串 1 结束, 跳转到标号 "movl %4,%%edi\n\t" // edi 再次指向串 2 首 312 "movl %%edx,%%ecx\n\t" // 串 2 长度值置入计数器 ecx 313 "repne\n\t" // 将 al 中串 1 的字符与串 2 中每个字符比较, 314 "scasb\n\t" // 测试 al 字符是否是分割符 315 "jne 3b\n\t" // 若不是分割符则跳转标号 3, 检测串 1 中下一个字符 316 "decl %1\n\t" // 若是分割符, 则 esi--, 指向该分割符字符 317 "cmpb $0,(%1)\n\t" // 该分割符是 NULL 字符吗? 318 "je 5f\n\t" // 若是, 则跳转到标号 "movb $0,(%1)\n\t" // 若不是, 则将该分割符用 NULL 字符替换掉 320 "incl %1\n\t" // esi 指向串 1 中下一个字符, 也即剩余串首 321 "jmp 6f\n" // 跳转标号 6 处 322 "5:\txorl %1,%1\n" // esi 清零 323 "6:\tcmpb $0,(%0)\n\t" // ebx 指针指向 NULL 字符吗? 324 "jne 7f\n\t" // 若不是, 则跳转标号 "xorl %0,%0\n" // 若是, 则让 ebx=null 326 "7:\ttestl %0,%0\n\t" // ebx 指针为 NULL 吗? 327 "jne 8f\n\t" // 若不是则跳转 8, 结束汇编代码 328 "movl %0,%1\n" // 将 esi 置为 NULL 329 "8:" 330 :"=b" ( res),"=s" ( strtok) 331 :"0" ( strtok),"1" (s),"g" (ct) 332 :"ax","cx","dx","di"); 333 return res; // 返回指向新 token 的指针 334 } 335 //// 内存块复制 从源地址 src 处开始复制 n 个字节到目的地址 dest 处 // 参数 :dest - 复制的目的地址,src - 复制的源地址,n - 复制字节数 // %0 - ecx(n),%1 - esi(src),%2 - edi(dest) 336 extern inline void * memcpy(void * dest,const void * src, int n) 337 { 338 asm ("cld\n\t" // 清方向位 339 "rep\n\t" // 重复执行复制 ecx 个字节, 340 "movsb" // 从 ds:[esi] 到 es:[edi],esi++,edi ::"c" (n),"s" (src),"d" (dest) 342 :"cx","si","di"); 343 return dest; // 返回目的地址 344 } 345 //// 内存块移动 同内存块复制, 但考虑移动的方向 // 参数 :dest - 复制的目的地址,src - 复制的源地址,n - 复制字节数
9 // 若 dest<src 则 :%0 - ecx(n),%1 - esi(src),%2 - edi(dest) // 否则 :%0 - ecx(n),%1 - esi(src+n-1),%2 - edi(dest+n-1) // 这样操作是为了防止在复制时错误地重叠覆盖 346 extern inline void * memmove(void * dest,const void * src, int n) 347 { 348 if (dest<src) 349 asm ("cld\n\t" // 清方向位 350 "rep\n\t" // 从 ds:[esi] 到 es:[edi], 并且 esi++,edi++, 351 "movsb" // 重复执行复制 ecx 字节 352 ::"c" (n),"s" (src),"d" (dest) 353 :"cx","si","di"); 354 else 355 asm ("std\n\t" // 置方向位, 从末端开始复制 356 "rep\n\t" // 从 ds:[esi] 到 es:[edi], 并且 esi--,edi--, 357 "movsb" // 复制 ecx 个字节 358 ::"c" (n),"s" (src+n-1),"d" (dest+n-1) 359 :"cx","si","di"); 360 return dest; 361 } 362 //// 比较 n 个字节的两块内存 ( 两个字符串 ), 即使遇上 NULL 字节也不停止比较 // 参数 :cs - 内存块 1 地址,ct - 内存块 2 地址,count - 比较的字节数 // %0 - eax( res),%1 - eax(0),%2 - edi( 内存块 1),%3 - esi( 内存块 2),%4 - ecx(count) // 返回 : 若块 1> 块 2 返回 1; 块 1< 块 2, 返回 -1; 块 1== 块 2, 则返回 extern inline int memcmp(const void * cs,const void * ct,int count) 364 { 365 register int res asm ("ax"); // res 是寄存器变量 366 asm ("cld\n\t" // 清方向位 367 "repe\n\t" // 如果相等则重复, 368 "cmpsb\n\t" // 比较 ds:[esi] 与 es:[edi] 的内容, 并且 esi++,edi "je 1f\n\t" // 如果都相同, 则跳转到标号 1, 返回 0(eax) 值 370 "movl $1,%%eax\n\t" // 否则 eax 置 1, 371 "jl 1f\n\t" // 若内存块 2 内容的值 < 内存块 1, 则跳转标号 "negl %%eax\n" // 否则 eax = -eax 373 "1:" 374 :"=a" ( res):"0" (0),"D" (cs),"s" (ct),"c" (count) 375 :"si","di","cx"); 376 return res; // 返回比较结果 377 } 378 //// 在 n 字节大小的内存块 ( 字符串 ) 中寻找指定字符 // 参数 :cs - 指定内存块地址,c - 指定的字符,count - 内存块长度 // %0 - edi( res),%1 - eax( 字符 c),%2 - edi( 内存块地址 cs),%3 - ecx( 字节数 count) // 返回第一个匹配字符的指针, 如果没有找到, 则返回 NULL 字符 379 extern inline void * memchr(const void * cs,char c,int count) 380 { 381 register void * res asm ("di"); // res 是寄存器变量 382 if (!count) // 如果内存块长度 ==0, 则返回 NULL, 没有找到 383 return NULL; 384 asm ("cld\n\t" // 清方向位 385 "repne\n\t" // 如果不相等则重复执行下面语句, 386 "scasb\n\t" // al 中字符与 es:[edi] 字符作比较, 并且 edi++, 387 "je 1f\n\t" // 如果相等则向前跳转到标号 1 处
10 388 "movl $1,%0\n" // 否则 edi 中置 "1:\tdecl %0" // 让 edi 指向找到的字符 ( 或是 NULL) 390 :"=D" ( res):"a" (c),"d" (cs),"c" (count) 391 :"cx"); 392 return res; // 返回字符指针 393 } 394 //// 用字符填写指定长度内存块 // 用字符 c 填写 s 指向的内存区域, 共填 count 字节 // %0 - eax( 字符 c),%1 - edi( 内存地址 ),%2 - ecx( 字节数 count) 395 extern inline void * memset(void * s,char c,int count) 396 { 397 asm ("cld\n\t" // 清方向位 398 "rep\n\t" // 重复 ecx 指定的次数, 执行 399 "stosb" // 将 al 中字符存入 es:[edi] 中, 并且 edi ::"a" (c),"d" (s),"c" (count) 401 :"cx","di"); 402 return s; 403 } #endif 406
附錄C.doc
C C C-1 C -2 C -3 C -4 C -5 / C -6 2 C/C++ C-1 FILE* fopen(const char* filename, const char* mode) filename NULL FILE* freopen(const
More informationC 1
C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=
More information《C语言程序设计》第2版教材习题参考答案
教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =
More information《C语言程序设计》教材习题参考答案
教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,
More information北京大学
1 string 类 郭炜刘家瑛 北京大学程序设计实习 string 类 string 类是一个模板类, 它的定义如下 : typedef basic_string string; 使用 string 类要包含头文件 string 对象的初始化 : string s1("hello"); // 一个参数的构造函数 string s2(8, x ); // 两个参数的构造函数
More informationLinux kernel exploit研究和探索
Linux kernel exploit DOC alert7 PPT e4gle 2002-12-2 1 2002-12-2 2 Linux kernel exploit kernel exploit exploit exploit exploit (Kernel Buffer Overflow) (Kernel
More information新版 明解C言語入門編
328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66
More information《计算概论》课程 第十九讲 C 程序设计语言应用
计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout
More informationMicrosoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc
2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.
More informationMicrosoft PowerPoint - string_kruse [兼容模式]
Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.
More information程序 12-2 linux/fs/bitmap.c 1 /* 2 * linux/fs/bitmap.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 /* bitmap.c contains the code that handles the inode and
程序 12-2 linux/fs/bitmap.c 1 /* 2 * linux/fs/bitmap.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 /* bitmap.c contains the code that handles the inode and block bitmaps */ /* bitmap.c 程序含有处理 i 节点和磁盘块位图的代码
More informationMicrosoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]
Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];
More information新版 明解C++入門編
511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,
More information1
1 2 3 4 5 GNUDebugger 6 7 void main(int argc, char **argv){ vulncpy(argv[1]); return; } void vulncpy(char *a){ char buf[30]; strcpy(buf, a); return; } *argv[1] buf Shellcode *argv[1]... &buf &buf 8 strcpy
More informationGuava学习之CharSequenceReader
CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类
More information新・明解C言語入門編『索引』
!... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177
More informationchap07.key
#include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,
More informationMicrosoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc
2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.
More informationWindows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco
Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows
More information幻灯片 1
字符串处理是指对一系列的字母或数字的代码进行相同功能的处理 计算机中字符代码一般都采用 ASCII 码, 每个字符的代码占一个字节, 一组字符串存放在一个连续的存储区中 存放在连续的存储区中的这组字符串, 可看为一个数据块 为了提高对字符串 ( 或数据块 ) 的处理效率,8086/8088 指令系统中专门提供了一组对字符串处理的指令, 这些指令包括 : 字符串传送指令 (MOVS) 字符串比较指令
More information,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20
(Jump) (Loop) (Conditional jump) CMP CALL AND SAR/SHR TEST JMP NOT SAL/SHL Jnnn* OR RCR/ROR LOOP XOR RCL/ROL RETn * nnn, JNE JL -128 127-32,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far
More informationC++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1
C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,
More information新・解きながら学ぶC言語
330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180
More information学习MSP430单片机推荐参考书
MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP
More informationCC213
: (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,
More information<4D6963726F736F667420576F7264202D2032303037C4EAC6D5CDA8B8DFB5C8D1A7D0A3D5D0C9FAC8ABB9FACDB3D2BBBFBCCAD4CEC4BFC6D7DBBACDCAD4BEEDBCB0B4F0B0B82DD6D8C7ECBEED2E646F63>
2007 年 普 通 高 等 学 校 招 生 全 国 统 一 考 试 ( 重 庆 卷 ) 文 综 试 卷 第 一 部 分 本 部 分 共 35 题, 每 题 4 分, 共 140 分 在 每 题 给 出 的 四 个 选 项 中, 只 有 一 项 最 符 合 题 目 的 要 求 的 读 图 1, 回 答 1-3 题 1. 某 两 洲 面 积 之 和 与 某 大 洋 面 积 十 分 接 近, 它 们 是
More informationuntitled
3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(
More informationC/C++语言 - 运算符、表达式和语句
C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe
More information一 学 校 基 本 情 况 目 录 二 部 门 预 算 报 表 ( 一 ) 收 支 总 表 ( 二 ) 收 入 总 表 ( 三 ) 支 出 总 表 ( 四 ) 财 政 拨 款 支 出 表 三 部 门 预 算 报 表 说 明 ( 一 ) 收 支 总 表 说 明 ( 二 ) 收 入 总 表 说 明 (
浙 江 大 学 2016 年 部 门 预 算 2016 年 5 月 1 一 学 校 基 本 情 况 目 录 二 部 门 预 算 报 表 ( 一 ) 收 支 总 表 ( 二 ) 收 入 总 表 ( 三 ) 支 出 总 表 ( 四 ) 财 政 拨 款 支 出 表 三 部 门 预 算 报 表 说 明 ( 一 ) 收 支 总 表 说 明 ( 二 ) 收 入 总 表 说 明 ( 三 ) 支 出 总 表 说 明
More information目 录 一 学 校 基 本 情 况 二 2016 年 预 算 报 表 ( 一 ) 中 南 大 学 收 支 预 算 总 表 ( 二 ) 中 南 大 学 收 入 预 算 表 ( 三 ) 中 南 大 学 支 出 预 算 表 ( 四 ) 中 南 大 学 财 政 拨 款 支 出 预 算 表 三 2016 年
中 南 大 学 2016 年 部 门 预 算 二 一 六 年 五 月 1 目 录 一 学 校 基 本 情 况 二 2016 年 预 算 报 表 ( 一 ) 中 南 大 学 收 支 预 算 总 表 ( 二 ) 中 南 大 学 收 入 预 算 表 ( 三 ) 中 南 大 学 支 出 预 算 表 ( 四 ) 中 南 大 学 财 政 拨 款 支 出 预 算 表 三 2016 年 预 算 情 况 说 明 (
More information信息参考
内 部 资 料 注 意 保 密 信 息 参 考 2016 年 第 1 期 ( 总 第 26 期 ) 党 政 办 公 室 编 2016 年 2 月 29 日 工 作 要 点 教 育 部 2016 年 工 作 要 点 (1) 中 共 北 京 市 委 教 育 工 作 委 员 会 北 京 市 教 育 委 员 会 北 京 市 人 民 政 府 教 育 督 导 室 2015 年 工 作 要 点 (10) 中 共
More informationMicrosoft Word - 15dbtb007
第 7 期 中 共 浙 江 大 学 委 员 会 办 公 室 2015 年 12 月 16 日 按 :2015 年 12 月 15 日, 学 校 召 开 了 2015 年 党 建 工 作 会 议, 党 委 书 记 金 德 水 同 志 作 出 重 要 讲 话, 深 刻 分 析 了 学 校 改 革 发 展 面 临 的 形 势, 对 加 强 和 改 进 学 校 党 的 建 设 进 行 了 部 署, 对 充
More information程序 linux/include/linux/math_emu.h 1 /* 2 * linux/include/linux/math_emu.h 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 #ifndef _LINUX_MATH_EMU_H 7 #de
程序 14-24 linux/include/linux/math_emu.h 1 /* 2 * linux/include/linux/math_emu.h 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 #ifndef _LINUX_MATH_EMU_H 7 #define _LINUX_MATH_EMU_H 8 9 #include
More information_汪_文前新ok[3.1].doc
普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向
More information38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民
1 08414159 惠 鴻 眼 鏡 行 桃 園 市 中 壢 區 福 德 里 中 華 路 一 段 186 號 1 樓 30,000 獨 資 宋 耀 鴻 105/04/27 府 經 登 字 第 1059003866 號 2 17891110 承 元 冷 氣 空 調 工 程 行 桃 園 市 桃 園 區 中 德 里 國 際 路 1 段 98 巷 50 號 2 樓 之 4 200,000 獨 資 詹 安 平
More informationC/C++ - 字符串与字符串函数
C/C++ Table of contents 1. 2. 3. 4. 1 char C 2 char greeting [50] = " How " " are " " you?"; char greeting [50] = " How are you?"; 3 printf ("\" Ready, go!\" exclaimed John."); " Ready, go!" exclaimed
More informationMicrosoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]
指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++
More information今天刚发现的, 比较简单, 于是就来简单分析下吧 该感染样本很简单, 新加了个区段放病毒执行代码, 执行病毒代码, 最后跳回原入口点来执行原文件 下面就是感染后的代码的简单分析 : ; =============== S U B R O U T I N E =====================
吾爱破解论坛 [LCG] [LSG] 立足软件安全和病毒分析最前端, 丰富的技术版块交相辉映, 由无数加密解密及反病毒爱好者共同维护, 留给世界一抹值得百年回眸的惊 艳, 沉淀百年来计算机应用之精华与优雅, 信息线条与生活质感淡定交融, 任岁月流转, 低调而奢华的技术交流与研究却是亘古不变 标题 : 一个感染样本的简单分析 作者 :ximo 今天刚发现的, 比较简单, 于是就来简单分析下吧 该感染样本很简单,
More informationMicrosoft Word - QQScLauncher逆向分享.docx
QQScLauncher 逆向分析 逆向版本 :QQ2011 正式版 (2425) 逆向目的 : 只是感兴趣, 没有任何其他意图版权声明 : 本文档由代码疯子整理, 在保留本文档版权声明和原始出处的前提下欢迎转载! 需要工具 :IDA Pro Ollydbg 正文内容 : 在 QQ 最新版 (QQ2011 正式版 ) 中加入了不少新功能, 如手写 视频群聊 语音输入等, 另外还有一个功能是可以把好友拖放到桌面上,
More informationC/C++ - 函数
C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh
More informationC/C++程序设计 - 字符串与格式化输入/输出
C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int
More information1 CPU interrupt INT trap CPU exception
1 CPU interrupt INT trap CPU exception 2 X86 CPU gate 64 16 1 2 5 8 16 16 P DPL 00101 TSS 101 DPL P 1 64 16 1 2 1 1 3 3 5 16 16 16 P DPL 0 D 000 16 110 111 100 D 1=32 0=16 DPL P 1 INT DPL1>=CPL>=DPL CPU
More information文件
CH10 文件 1 文件的概念 一 文件分类 二 文件的组织结构 : ASCII 码文件 ( 文本文件 ) 二进制文件 文件是二进制代码的, 则文件就是字节流 文件是 ASCII 码的, 则文件就是字符流, 也是字节流 1 如 : 对于整型变量 x, 其值为 32767 若以文本方式存放, 则共有 5 个字符, 内容为 : 00110011 00110010 00110111 00110110 00110111
More information幻灯片 1
操作系统课程实验 Lab1:bootloader 启动 ucore os 大纲 x86 启动顺序 C 函数调用 gcc 内联汇编 (inline assembly) x86-32 下的中断处理 理解 x86-32 平台的启动过程理解 x86-32 的实模式 保护模式理解段机制 x86 启动顺序 x86 启动顺序 寄存器初始值 摘自 "IA-32 Intel 体系结构软件开发者手册 " x86 启动顺序
More informationuntitled
A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (
More informationC/C++ - 文件IO
C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;
More informationFY.DOC
高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主
More information1 32 a + b a + b 2 2 a b a b 2 2 2 4a 12a + 9 a 6 2 4 a 12a + 9 a 6 ( 2a 3) 2 a 6 3 1 2 4 + 2 4 8 + 3 6 12 + 1 3 9 + 2 6 18+ 3 9 27 + 1 10 1 10 ax + by = 2 cx 7y = 8 1 2 1 4 1 8 1
More informationC
C 2017 3 14 1. 2. 3. 4. 2/95 C 1. 3/95 C I 1 // talkback.c: 2 #include 3 #include 4 #define DENSITY 62.4 5 int main(void) 6 { 7 float weight, volume; 8 int size; 9 unsigned long letters;
More information. v dx v d () () l s dl s d (_) d () v s v s () a dv a d (_) ( ) ( ) x- = v- = = v 0 = m/s a = = m/s 2 a- = ( ) x- v- a- Page 2 of 20
Page 1 of 20 . v dx v d () () l s dl s d (_) d () v s v s () a dv a d (_) ( ) ( ) x- = v- = = v 0 = m/s a = = m/s 2 a- = ( ) x- v- a- Page 2 of 20 (1) x v a (2) x v a x v (3) x v a x v a x v Page 3 of
More information标题
共 青 团 中 央 文 件 中 青 发 也 2010 页 8 号 茵 绎 关 于 表 彰 2009 年 度 全 国 优 秀 共 青 团 员 冶 全 国 优 秀 共 青 团 干 部 冶 全 国 五 四 红 旗 团 委 ( 团 支 部 ) 冶 的 决 定 (2010 年 4 月 28 日 ) 2009 年 以 来, 全 国 各 级 团 组 织 按 照 力 争 使 团 的 基 层 组 织 网 络 覆 盖
More informationGuava学习之Resources
Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于
More information42 2141601026 2016 11 27 2 1.1............................................. 2 1.2....................................... 2 1.2.1......................................... 2 1.3.............................................
More information<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>
因 为 路 过 你 的 路, 因 为 苦 过 你 的 苦, 所 以 快 乐 着 你 的 快 乐, 追 逐 着 你 的 追 逐 内 容 简 介 本 书 根 据 2005 年 下 半 年 实 施 的 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 嵌 入 式 系 统 设 计 师 级 考 试 大 纲 精 神, 在 深 入 研 究 历 年 计 算 机 技 术 与 软
More informationD/A DAC ( 1us) (10~20 ) DAC0832 1
D/A DAC0832 8 ( 1us) (10~20 ) DAC0832 1 1. 20 DI7~DI0 ILE 8 8 DAC 8 D/A LE LE & RFB VREF IOUT2 IOUT1 RFB CS WR1 XFER WR2 & & AGND VCC DGND 2 DI7~DI0 ILE & 8 LE 8 DAC LE 8 D/A RFB V REF IOUT2 IOUT1 R FB
More information(譯本)
城 市 規 劃 委 員 會 都 會 規 劃 小 組 委 員 會 二 零 一 二 年 五 月 十 八 日 上 午 九 時 舉 行 的 第 466 次 會 議 記 錄 出 席 者 規 劃 署 署 長 梁 焯 輝 先 生 主 席 黄 仕 進 教 授 副 主 席 何 培 斌 教 授 許 智 文 教 授 劉 文 君 女 士 李 律 仁 先 生 陸 觀 豪 先 生 陳 祖 楹 女 士 張 孝 威 先 生 何 立
More information上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 理 财 资 金, 则 客 户 面 临 产 品 期 限 延 期 调 整 等 风 险 8. 信 息 传 递 风 险 : 上 海 农 商 银 行 将 按 照 本 说 明 书 有 关 信 息 公 告 的 约 定, 进 行 产 品 信 息 披 露 客
上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 鑫 意 理 财 福 通 日 鑫 H14001 期 人 民 币 理 财 产 品 风 险 揭 示 书 尊 敬 的 客 户 : 由 于 理 财 资 金 管 理 运 用 过 程 中, 可 能 会 面 临 多 种 风 险 因 素, 因 此, 根 据 中 国 银 行 业 监 督 管 理 委 员 会 相 关 监 管 规 定 的 要 求, 在 您 选 择
More information<4D6963726F736F667420576F7264202D20B8CAD7E9CDA8A1B232303136A1B33638BAC5B9D8D3DAD4DAC8ABD6DDB5B3D4B1D6D0BFAAD5B9D5FDB7B4B5E4D0CDD1A7CFB0BDCCD3FDBBEEB6AFB5C4CDA8D6AA2E646F63>
甘 组 通 2016 68 号 关 于 在 全 州 党 员 中 开 展 正 反 典 型 学 习 教 育 活 动 的 通 知 各 县 ( 市 ) 委, 州 委 各 部 委, 州 级 各 部 门 党 组 ( 党 委 党 工 委 ), 省 州 属 行 政 企 事 业 单 位 党 委 ( 党 组 ): 为 深 入 推 进 全 州 两 学 一 做 学 习 教 育, 教 育 引 导 全 州 党 员 以 身 边
More information:,,,,,,,,,,,,,,,,,,,,,,,,,,, 2006 1
:,,,,,,,,,,,,,,,,,,,,,,,,,,, 2006 1 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 1. ( ) 2. ( ) ( ) 1. ( ) 1 2. ( ) 3. ( ) 4. ( ) ( ) ( ) 1. ( ) ( ) ( )
More information度定生老病死
溫度決定生老病死作者: 馬悅淩 江蘇文藝出版社 1 受寒涼的途徑 我遇到的許多患癌症或其他重病的人 都有受寒涼的經歷 一位 44 歲的女士 患有肺癌 骨癌 腎癌 該女士總是發低熱 常規治 療一個月後效果不明顯 CT 檢查發現肺部有兩個腫塊 又繼續做進一步檢查 結果令所有人大吃一驚 腫瘤已全身轉移 3 個月後去世 家人不能理解 說 她身體一向不錯 很少生病 只是這一兩年身體弱一些 怎麼會突然得這麼重
More information按 照 卫 计 委 的 规 划, 对 于 县 级 医 院 主 要 做 一 下 工 作 加 强 临 床 重 点 专 科 建 设, 提 升 县 级 医 院 医 疗 技 术 水 平, 并 配 备 与 专 科 建 设 目 标 一 致 的 适 宜 设 备 1. 县 医 院 除 了 将 健 全 一 级 诊 疗
首 批 卫 计 委 重 点 扶 持 500 家 县 医 院 名 单 公 布 新 医 改 以 来, 分 级 诊 疗 强 基 层 一 直 都 是 重 点, 县 级 医 疗 市 场 增 长 快 速, 但 是 离 最 理 想 的 状 态 仍 有 较 大 的 差 距, 大 医 院 尤 其 是 知 名 的 三 甲 医 院 仍 是 人 满 为 患, 离 达 到 县 域 就 诊 率 达 到 90%, 基 本 做 到
More information专科疾病诊治(二十四)
...1...6...9...20...22...25...28...31...34...37...40...43...48...49...53...58...71...75...78 1 ...80...83...85...92...94...95... 101... 102... 104... 107... 108...111... 119... 120... 121... 122... 124...
More informationMicrosoft Word - 林金萱.docx
改 觀 王 碧 雲 顏 面 麻 痺, 臉 腫 如 水 月, 雙 目 無 神, 左 眼 圓 瞠 暴 突, 右 眼 凹 陷 崩 垂, 下 顎 頦 部 鬆 弛 右 傾, 笑 起 來 嘴 歪 眼 斜, 兩 頰 連 接 頸 項 一 帶 猶 有 灼 傷 過 的 痕 跡 一 張 令 人 見 識 過 後 猶 帶 了 個 揮 之 不 去 的 夢 魘 般 的 鬼 臉, 正 張 牙 舞 爪 地 衝 擊 著 我 乍 然 回
More information<4D6963726F736F667420576F7264202D20BACEECF1E2D3A3BAD6D0D2BDC0EDC2DBB5C4BACBD0C4CAC7CEB1BFC6D1A72E646F63>
何 祚 庥 : 中 医 理 论 的 核 心 是 伪 科 学 环 球 人 物 记 者 路 琰 何 祚 庥 曾 经 有 言 : 中 国 传 统 文 化 有 90% 是 糟 粕 这 句 话 曾 引 起 的 一 场 笔 战 这 段 时 间, 一 些 学 者 发 布 告 别 中 医 的 言 论 再 次 引 起 了 何 祚 庥 对 中 医 的 关 注 开 始 谈 话 之 前, 他 手 里 拿 着 两 份 资 料
More information<B0DACDD1D1C7BDA1BFB5B5C4C0A7C8C52E733932>
目 录 第 一 章 认 识 亚 健 康 (1) 第 二 章 亚 健 康 状 况 (19) 第 三 章 与 亚 健 康 相 关 的 疾 病 (57) 第 四 章 防 治 亚 健 康 (65) 第 五 章 新 森 田 疗 法 (112) 摆 脱 亚 健 康 的 困 扰 第 一 章 认 识 亚 健 康 第 一 节 亚 健 康 的 症 状 亚 健 康 状 态 涉 及 的 内 容 很 广 泛, 各 种 内 脏
More information把生命托付给谁?
把 生 命 托 付 给 谁? 一 个 癌 症 患 者 的 重 生 感 悟 本 报 首 席 评 论 徐 迅 雷 2012-11-11 癌 症, 不 等 于 绝 症 癌 症, 不 等 于 死 亡 著 名 作 家 记 者 凌 志 军, 将 自 己 5 年 抗 癌 的 经 历, 写 成 重 生 手 记 一 个 癌 症 患 者 的 康 复 之 路 一 书, 日 前 出 版 在 有 个 购 书 网 站 上, 我
More information4 0 50 2 30 56 1957 527 1960 1961 1961 1957 20 50 527 19611966 10 10 0 05 2 0 30 0 20 30 50 0 30 0 20 0 10 40 50 0 500 80 1 20 0 20 5 100 10 155 6 1 0
1873 20 1909 56 20 14 1925 1 31 6 1 2 4 25 5 12 1 5 15 15 24 26 O 515 25 525 2 25 2 2 2 2 5 2 25 2 5 520 2 2 5 25 5 130 220 510 25 16 1950 X 30 0 04 0 02 0 10 0 05 1954 0 15 0 10 0 70 0 30 0 30 0 70 0
More information《中老年男性养生保健》
1 2 2001 1...1...2...12...18...18...20...23...28...41...43...51...51...55...71...78...82...82...91...91...91...98 2... 103... 106... 115... 118... 124... 124... 132... 134... 137... 138... 140... 141...
More information36 asm ("mov %%fs,%%ax":"=a" ( res):); \ 37 res;}) 38 // 以下定义了一些函数原型 39 void page_exception(void); // 页异常 实际是 page_fault(mm/page.s,14) void divi
程序 8-2 linux/kernel/traps.c 1 /* 2 * linux/kernel/traps.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 /* 8 * 'Traps.c' handles hardware traps and faults after we have saved some 9 * state in 'asm.s'. Currently
More information( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)
( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.
More informationARM中C和汇编混合编程及示例.doc
ARM 中 C 和汇编混合编程及示例 在嵌入式系统开发中, 目前使用的主要编程语言是 C 和汇编,C++ 已经有相应的编译器, 但是现在使用还是比较少的 在稍大规模的嵌入式软件中, 例如含有 OS, 大部分的代码都是用 C 编写的, 主要是因为 C 语言的结构比较好, 便于人的理解, 而且有大量的支持库 尽管如此, 很多地方还是要用到汇编语言, 例如开机时硬件系统的初始化, 包括 CPU 状态的设定,
More informationChapter12 Derived Classes
继 承 -- 派 生 类 复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) { 2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数
More informationCC213
: (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620
More information,310,022, ,382,044, % 1,270,602, ,316,653, % % % 19,720,
2006 2006 1 1.1 1.2 1.3 1.4 1.5 2 2.1 000520 39 39 027-85321845 85703197 027-85321845 85703197 027-85321845 027-85321845 csc-hy@tom.com csc-hy@tom.com 2.2 2006 2.2.1 3,310,022,385.31 1,382,044,309.28 139.50%
More informationbingdian001.com
TSM12M TSM12 STM8L152C6, STM8L152R8 MSP430F5325 whym1987@126.com! /******************************************************************************* * : TSM12.c * : * : 2013/10/21 * : TSM12, STM8L f(sysclk)
More informationMicrosoft PowerPoint - lec11 [兼容模式]
代码生成 代码生成 代码生成的输入 - 各种中间代码形式 目标代码与目标机器模型 简单的代码生成器 基本块 DAG 图及代码生成 目标代码 绝对地址目标代码 可重定位的目标 - linker/loader 汇编代码 - assembler 目标机器模型 指令形式 op 源, 目的 寻址模式 - 绝对地址 :op M, R R op (M) R - 寄存器 :op R1,R2 R2 op R1 R2
More information<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>
臺 北 市 立 松 山 高 級 工 農 職 業 學 校 資 訊 科 專 題 製 作 報 告 題 目 : 反 彈 空 間 指 導 老 師 : 余 耀 銘 學 生 : 廖 國 銓 趙 信 瑋 中 華 民 國 102 年 5 月 摘 要 在 這 高 速 科 技 的 起 飛 下, 科 技 都 建 立 起 於 基 礎, 有 些 人 把 這 基 礎 轉 為 理 論, 教 給 大 眾 學 習 ; 有 些 人 利
More information嵌入式Linux开发课程
嵌入式 Linux 开发课程 ( 应用程序 ) 主讲人 : David.T 课程安排 1. 初识 Linux 环境下的编程 2. Linux 下的磁盘和文件 I/O 操作 3. 流式文件操作 4. 字符串操作回顾 ( 一 ) 初识 Linux 环境下的编程 1. 你的第一个程序 :Helloworld vi helloworld.c #include int main() { printf(
More informationint *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;
Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,
More informationC/C++ - 结构体、共用体、枚举体
C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 C C (struct) C 2 C C (struct) C 2 i // book.c: # include < stdio.h> # define MAX_ TITLE 41 # define MAX_ AUTHOR 31 struct book { char title [ MAX_ TITLE
More informationstatic struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def
Kaise s 2410 Board setting [1]. Device Driver Device Driver Linux s Kernel ARM s kernel s3c2410_kernel2.4.18_r1.1_change.tar.bz2 /usr/src (1) #cd /usr/src (2) #tar xfj s3c2410_kernel2.4.18_r1.1_change.tar.bz2
More information华恒家庭网关方案
LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU
More information- 22-4 58 4 5 1998 12 415 416 6 431 7 1993 359
- 21-1 2 1 52 1963 1 7 154 2 1478 62 3 202 193-21 - - 22-4 58 4 5 1998 12 415 416 6 431 7 1993 359 - 23-8 8 5 1573 9 10 2120 1982 2 11 1480 729-730 - 23 - - 24-12 1007~1072 14 15 12 1997 4 9-10 13 1997
More information2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d
2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,
More information标题
本章学习导读 本章主要介绍串的定义及基本运算, 重点介绍串的存储结构, 基本运算与串的 C# 实现方法 读者学习本章后应能掌握串的定义, 串的基本运算, 运用串来实现文本输入和输出 4.1.1 串的定义 4.1 串的基本概念 字符串在应用程序中的使用非常频繁 字符串简称串, 是一种特殊的线性表, 其特殊性在于串中的数据元素是一个个的字符 在事务处理程序中, 顾客的信息如姓名 地址等及货物的名称 产地和规格等,
More informationC/C++ - 字符输入输出和字符确认
C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,
More information格式化字符串 Weifeng Sun School of Software, DLUT
格式化字符串 Weifeng Sun School of Software, DLUT 格式化字符串漏洞 格式化字符串, 也是一种比较常见的漏洞类型 会触发该漏洞的函数很有限 主要就是 printf 还有 sprintf,fprintf 等等 c 库中 print 家族的函数 >int printf(const char* format,...) 2 / 42 3 / 42 A B 字符串指针 char
More information2006年国家公务员招录考试行测真题(A)
2006 年 中 央 国 家 机 关 公 务 员 录 用 考 试 行 政 职 业 能 力 测 验 (A) 真 题 说 明 这 项 测 验 共 有 五 个 部 分,135 道 题, 总 时 限 为 120 分 钟 各 部 分 不 分 别 计 时, 但 都 给 出 了 参 考 时 限, 供 你 参 考 以 分 配 时 间 请 在 机 读 答 题 卡 上 严 格 按 照 要 求 填 写 好 自 己 的 姓
More informationC/C++语言 - C/C++数据
C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;
More informationMicrosoft Word - MSP430 Launchpad 指导书.docx
Contents 3... 9... 14 MSP430 LAUNCHPAD 指导书 3 第一部分第一个工程 New Project File > New > CCS Project Project name: ButtonLED Device>Family: MSP430 Variant: MSP430G2553 Project templates and examples : Empty Project
More information1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un
Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................
More information新・解きながら学ぶJava
481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --
More informationSP_ SP_03 JAVA...6 SP_10 SQL...8 SP_ SP_ SP_ SP_ SP_ SP_ SP_ SP_04.NET...33 SP_02 C...37 SP_05
1 SP_01...3 SP_03 JAVA...6 SP_10 SQL...8 SP_51...12 SP_32...15 SP_53...18 SP_20...21 SP_22...24 SP_21...27 SP_23...30 SP_04.NET...33 SP_02 C...37 SP_05 FLASH...39 SP_06...42 2 SP_01 1. 8. Excel 2. 9. PowerPoint
More informationC语言的应用.PDF
AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local
More informationebook50-15
15 82 C / C + + Developer Studio M F C C C + + 83 C / C + + M F C D L L D L L 84 M F C MFC DLL M F C 85 MFC DLL 15.1 82 C/C++ C C + + D L L M F C M F C 84 Developer Studio S t u d i o 292 C _ c p l u s
More informationnooog
C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1
More information