08 2018 档案

摘要:需要破解的程序 双击程序,提示需要许可证文件 逆向程序 用 OD 打开 LoadIconA 为加载图标 LoadCursorA 为加载鼠标 F8 走一下程序 走到了这里,调用了 CreateFileA,打开或创建文件 Keyfile.dat 但是当前目录没有 Keyfile.dat 文件 接下来是有 阅读全文
posted @ 2018-08-30 23:39 Sch01aR# 编辑
摘要:需要破解的程序 输入用户名和序列号,点击 Check,程序会进行校验 用 OD 打开程序 按快捷键 Ctrl+F9 跟随表达式 GetDlgItemTextA 点击 ok 在这里调用了 GetDlgItemTextA,按 F2 下一个断点 按这个 C 字母,快捷键为 Alt+C 回到程序的起始处 然 阅读全文
posted @ 2018-08-29 23:35 Sch01aR# 编辑
摘要:需要修改的程序 把 I love fishc.com 修改为 hello world sch01ar 用 OD 打开程序 在程序入口处开始一直按 F8 运行程序,看看在哪里弹出对话框 运行到该地址的时候,会弹出对话框 按 F2 在这个地址下一个断点 按 Ctrl+F2 重新载入程序,然后按 F9,运 阅读全文
posted @ 2018-08-28 20:05 Sch01aR# 编辑
摘要:F3 为加载一个可执行程序,进行调试分析 F2 为下断点 下完断点后,地址变为红色的 程序执行到断点处的时候会停下来 取消断点也是 F2 F4 为把程序执行到光标所在处 如果光标所在的位置在断点处之后,程序将会在断点处停下 F9 为运行程序,遇到断点处,程序暂停 Ctrl+F2 为重新运行程序到起始 阅读全文
posted @ 2018-08-28 19:30 Sch01aR# 编辑
摘要:1 为汇编代码对应的地址窗口 2 为汇编代码对应的十六进制机器码窗口 3 为反汇编窗口 4 为反汇编代码对应的注释信息窗口 5 为寄存器信息窗口 6 为当前执行到的反汇编代码的信息窗口 7~9 为数据所在的内存地址,十六进制,ASCII 码 10~12 为栈地址,存放的数据,对应说明信息 13 为 阅读全文
posted @ 2018-08-28 17:03 Sch01aR# 编辑
摘要:IDA 无法定位一个函数调用,由于没有直接的方法到达函数,IDA 将无法识别它们 IDA 可能无法正确确定函数的结束部分,需要手动干预,以更正反汇编代码中的错误 如果编译器已经将函数分割到几个地址范围,或者在优化代码的过程中,编译器为节省空间,将两个或几个函数的共同结束序列合并在一起,这时 IDA 阅读全文
posted @ 2018-08-26 16:34 Sch01aR# 编辑
摘要:&& 和 || 的布尔运算符被称为短路求值 它们连接一系列布尔表达式,仅计算最少的表达式来确定整个链的布尔值 在表达式 a && b 中,只有 a 为 true 时才计算子表达式 b 在表达式 a || b 中,只有 a 为 false 时才计算子表达式 b && 比 || 优先级高 && 和 || 阅读全文
posted @ 2018-08-25 23:51 Sch01aR# 编辑
摘要:方法一: 测试环境 Windows 2003 server 查看开启的端口 没有开启 3389 端口 执行语句 执行结果 再查看一下端口 3389 已经被开启了 方法二: 测试环境:Windows 2003 server 关闭之前开放的 3389 端口 执行语句 执行结果 查看端口开放情况 3389 阅读全文
posted @ 2018-08-24 13:24 Sch01aR# 编辑
摘要:三元运算符的格式: a 是条件表达式,如果条件 a 为真,就执行 b;如果条件 a 为假,就执行 c 二选一 三选一 : 前后的表达式,只有在对应条件表达式为 true 或 false 时才执行 阅读全文
posted @ 2018-08-23 23:52 Sch01aR# 编辑
摘要:Julia 中使用 if,elseif,else 进行条件判断 格式: 如果条件 expression1 成立,则执行语句 statement1 如果条件 expression2 成立,则执行语句 statement2 如果条件 expression1 和条件 expression2 都不成立,则执 阅读全文
posted @ 2018-08-23 22:12 Sch01aR# 编辑
摘要:IDA提供的代码转换包括: 1.将数据转换为代码 2.将代码转换为数据 3.指定一个指令序列为函数 4.更改现有函数的起始或结束地址 5.更改指令操作数的显示格式 代码显示选项 通过 Options -> General 命令打开“IDA Options”对话框,并选择“Disassembly”选项 阅读全文
posted @ 2018-08-23 16:23 Sch01aR# 编辑
摘要:复合表达式是用一个表达式按照顺序对一系列子表达式求值,并返回最后一个子表达式的值 有两种方法:begin 块和 “;” 链 begin 块 begin 块的多行写法 begin 块的单行写法 “;” 链 “;” 链的多行写法 “;” 链的单行写法 阅读全文
posted @ 2018-08-22 21:19 Sch01aR# 编辑
摘要:注释有助于以一种更高级的方式描述汇编语言指令序列 IDA 提供了几种不同类型的注释,每种注释适用于不同的目的 使用 Edit -> Comments 命令的选项,可以为反汇编代码清单中的任何一行代码添加注释 这是一个 scanf() 函数 某一行分号之后的内容都是注释 常规注释 常规注释位于现有汇编 阅读全文
posted @ 2018-08-22 19:20 Sch01aR# 编辑
摘要:多数情况下,要修改一个名称,只需单击想要修改的名称(使其突出显示),并使用快捷键 N 打开更名对话框 右击需要修改的名称,并在出现的上下文菜单中选择 Rename 选项,也可以更改名称 参数和局部变量 程序中的每个函数可能都有一个名为 arg_0 的栈变量,但没有一个函数拥有一个以上的 arg_0 阅读全文
posted @ 2018-08-22 14:48 Sch01aR# 编辑
摘要:while 循环 当 while 后的条件成立的话,执行循环体内的语句,直到条件不成立,跳出循环 如果条件一直成立,或者循环体中的语句没有能让条件不成立的,则是死循环 在旧版本中,不需要 global 关键字 for 循环 1:10 是一个 Range 对象,表示的是 1,2,3,4,5,6,7,8 阅读全文
posted @ 2018-08-22 00:01 Sch01aR# 编辑
摘要:暂时关闭 iptables 防火墙 暂时关闭 firewall 防火墙 暂时关闭 selinux 安装 samba 软件包 查看配置文件 user 需要账号密码 把系统用户添加到 samba 服务中 执行该命令之后需要增加密码 设置完之后连接 右键网络 选择映射网络驱动器 test 为添加给 sam 阅读全文
posted @ 2018-08-21 20:10 Sch01aR# 编辑
摘要:栈帧(stack frame)是在程序的运行时栈中分配的内存块,用于特定的函数调用 如果一个函数没有执行则不需要内存,当函数被调用时就需要用到内存 1.传给函数的参数的值需要存储到函数能够找到它们的位置 2.函数在执行过程中可能需要临时的存储空间,通过声明局部变量来分配这类临时空间,这些变量在函数内 阅读全文
posted @ 2018-08-21 17:43 Sch01aR# 编辑
摘要:Search -> Next Code 命令将光标移动到下一个包含指令的位置 Jump -> Jump to Function 命令可以打开所有函数,可以迅速选择一个函数并导航到该函数所在的位置 文本搜索 IDA 文本搜索相当于对反汇编列表窗口进行子字符串搜索 通过 Search -> Text 命 阅读全文
posted @ 2018-08-21 15:42 Sch01aR# 编辑
摘要:不定参数 不定参数的函数也称变参函数 函数的参数可以被定义成任意个 可以在最后一个参数后紧跟省略号“...”来定义变参函数 对变参函数进行参数传递 最前的两个参数 x,y 为普通的参数,需要对其进行传值,不然就报错了 变量 z 是尾随的可迭代的参数集合,其参数个数为 0 或多个,返回的是一个多元组 阅读全文
posted @ 2018-08-20 22:05 Sch01aR# 编辑
摘要:Julia 中的函数可以被匿名构造,成为匿名函数,匿名函数是没有函数名的函数 这是一个匿名函数,输入参数 x 的值,返回 x + 1 的值 该匿名函数相当于该函数 匿名函数的主要用途是将自己传递给其他函数作为参数 最经典的例子是 map 函数,它将函数应用于数组的每个值, 并返回一个包含结果值的新数 阅读全文
posted @ 2018-08-20 19:09 Sch01aR# 编辑
摘要:Julia 中,大多数运算符都是支持特定语法的函数 && 、 || 等短路运算是例外,它们不是函数,因为短路求值先算前面的值,再算后面的值 对于函数运算符,可以像其它函数一样,把参数列表用圆括号括起来,作为函数运算符的参数 可以像对其它函数一样,对 + 、* 等运算符进行赋值、传递 这时的 f 函数 阅读全文
posted @ 2018-08-20 16:59 Sch01aR# 编辑
摘要:return 返回值 要返回函数最后一个表达式的值,可以省略 return 有没有 return 结果是一样的,return 可以省略 如果使用判断语句,在函数中间返回表达式,要使用 return 函数如果没有经过判断语句返回的话,默认返回函数最后一个表达式的值,所以最后一个表达式不使用 retur 阅读全文
posted @ 2018-08-20 16:58 Sch01aR# 编辑
摘要:Julia 中的函数是将一系列参数组成的元组映设到一个返回值的对象 Julia 中定义函数的基本语法为: 该函数等价的赋值形式 调用该函数 f 指向的是函数对象,该函数对象赋值给其他变量 早些版本还有一种调用函数的方法 apply 函数把第一个参数当做函数对象,后面的参数是该函数对象的参数 变量名也 阅读全文
posted @ 2018-08-20 16:57 Sch01aR# 编辑
摘要:符号函数和绝对值函数 abs(x) 函数求 x 的绝对值(幅值) abs2(x) 函数求 x 的绝对值(幅值)的平方 sign(x) 函数求 x 的正负号,返回 -1,0,+1 signbit(x) 判断是否有符号位,返回 Bool 值 copysign(x, y) 返回一个数,这个数具有 x 的值 阅读全文
posted @ 2018-08-19 21:39 Sch01aR# 编辑
摘要:isascii() 判断是否是 ascii 码,返回 Bool 值 isdigit() 判断是否是数字(0-9),返回 Bool 值 isletter() 判断是否是字母,返回 Bool 值 islowercase() 判断是否是小写字母,返回 Bool 值 isuppercase() 判断是否是大 阅读全文
posted @ 2018-08-18 23:50 Sch01aR# 编辑
摘要:导航目标 在分析阶段,IDA 会通过检查二进制文件的符号表生成符号名称,或根据二进制文件引用位置的方式自动生成一个名称 反汇编窗口中显示的任何名称都是导航目标 双击任何一个符号,IDA 将跳转到相应的位置 这些是已经命名的导航目标 上面划红线的是交叉引用,也是导航目标 交叉引用通常被格式化成一个名称 阅读全文
posted @ 2018-08-18 20:27 Sch01aR# 编辑
摘要:字符 字符使用单引号括起来,字符是 32 位整数 字符对应的整数是相对应的 ASCII 码值 也可以把整数转换为相对应的字符 对字符进行比较 对字符进行算术运算 比较运算和算术运算都是根据 ASCII 码的值进行的 字符串 字符串使用双引号或三个双引号括起来 字符串索引 第一个索引是 1,而不是 0 阅读全文
posted @ 2018-08-18 14:30 Sch01aR# 编辑
摘要:算术运算符 算术运算符适用于所有的基本数值类型 +x,一元加法,就是 x 本身 -x,一元减法,x 的相反数 x + y,二元加法,做加法运算 x - y,二元减法,做减法运算 x * y,乘法,做乘法运算 x / y,除法,做除法运算 x ^ y,乘方,x 的 y 次幂 x % y,取余,x 除以 阅读全文
posted @ 2018-08-18 00:27 Sch01aR# 编辑
摘要:在 Julia 中,使用“//”运算符构造分数 分数会自动进行约分 负号都是显示在分子部分 把分数转换为浮点数 对于任意整数 a,b,a 和 b 不等于 0 可以构造结果为 Inf 的分数,但不能构造结果为 NaN 的分数 num() 函数获取约分后的分子的值 den() 函数获取约分后的分母的值 阅读全文
posted @ 2018-08-17 22:18 Sch01aR# 编辑
摘要:全局变量 im 即复数 i ,为复数的虚数单位,表示 -1 的正平方根 Julia 允许数值作为代数系数,这也适用于复数 复数的运算 real() 函数获取复数的实部大小 imag() 函数获取复数的虚部大小 conj() 函数求复数的共轭复数 abs() 函数求复数的模 对于复数 z = a + 阅读全文
posted @ 2018-08-17 21:31 Sch01aR# 编辑
摘要:浮点数类型: Float64 类型,双精度,64 位 Float32 类型,单精度,32 位 Float16 类型,半精度,16 位 这些结果都是 Float64 的值 十六进制浮点数的类型只能是 Float64 使用 f 来进行 Float32 值的输入 浮点数类型转换为 Float32 有的版本 阅读全文
posted @ 2018-08-17 17:38 Sch01aR# 编辑
摘要:所有的基础数据类型通过灵活用户可扩展的类型提升系统 ,不需显式类型转换,就可以互相运算 整数的默认类型,取决于系统是 32 位还是 64 位 Julia 内部变量 WORD_SIZE 查看系统是 32 位还是 64 位 Julia 定义了 Int 和 UInt 类型,分别是系统原生的有符号和无符号整 阅读全文
posted @ 2018-08-17 14:49 Sch01aR# 编辑
摘要:打开 IntelliJ IDEA 点击 Configure 选择 Plugins 然后点击 Browse repositories 搜索 Julia,然后点击 Install 进行安装 安装完重启一下 安装成功 新建一个项目 点击 Create New Project 选择 Julia,然后选择 J 阅读全文
posted @ 2018-08-17 12:32 Sch01aR# 编辑
摘要:变量的赋值 变量也可以使用 Unicode 字符(UTF-8 编码)来命名 Julia 允许重新定义内置的常数和函数 变量 ans 的值就是上一次计算的表达式的值,无论上一次是否被显示 变量 ans 仅适用于交互式会话,不适用于以其它方式运行 变量名区分大小写 内置的关键字不能当变量名 阅读全文
posted @ 2018-08-16 23:06 Sch01aR# 编辑
摘要:Ubuntu 下安装 Julia 环境 安装完成后打开 Julia 的交互式会话 按 Ctrl+D 退出交互式会话,或者用 quit() Julia 的参数: -v,--version,查看版本信息 -h,--help,查看帮助 -H,--home <dir>,设置 Julia 可执行文件的位置 - 阅读全文
posted @ 2018-08-16 22:06 Sch01aR# 编辑
摘要:默认情况下 IDA 不会打开这些窗口,可通过 View -> Open Subviews 命令打开 Strings 窗口(Strings) Strings 窗口中显示的是从二进制文件中提取出的一组字符串,以及每个字符串所在的地址 双击 Strings 窗口中的任何字符串,反汇编窗口和十六进制窗口将跳 阅读全文
posted @ 2018-08-14 20:28 Sch01aR# 编辑
摘要:十六进制窗口 IDA 十六进制窗口可以配置为显示各种格式,并可作为十六进制编辑器使用 默认情况下,十六进制窗口显示程序内容和列表的标准十六进制代码,每行显示 16 个字节,以及其对应的 ASCII 字符 和在反汇编窗口中一样,用户也可以同时打开几个十六进制窗口 第一个十六进制窗口叫做 Hex Vie 阅读全文
posted @ 2018-08-14 18:06 Sch01aR# 编辑
摘要:在默认配置下,IDA(从 6.1 版开始)会在对新二进制文件的初始加载和分析阶段创建 7 个显示窗口 3 个立即可见的窗口分别为 IDA-View 窗口、函数窗口和消息输出窗口 可以通过 View -> Open Subviews 菜单打开这些窗口 在 IDA 中,ESC 键是一个非常有用的热键 在 阅读全文
posted @ 2018-08-13 20:22 Sch01aR# 编辑
摘要:基本规则: IDA 不提供撤销功能 如果由于不小心按下某个键,导致数据库文件发生意外,这时需要将显示窗口恢复到以前的状态 几乎所有的操作都有其对应的菜单项、热键和工具栏按钮 IDA 的工具栏高度可配置,就像热键对菜单操作的映射一样 IDA 提供方便的、基于上下文的鼠标右键操作菜单 虽然这些菜单无法提 阅读全文
posted @ 2018-08-13 16:12 Sch01aR# 编辑
摘要:IDA 的默认桌面如下图 工具栏区域(1)包含与 IDA 的常用操作对应的工具,可以使用 View -> Toolbar 显示或隐藏工具栏 可以使用 View -> Toolbars -> Advanced mode 打开高级模式工具栏,高级模式工具栏包含整整三排工具按钮 彩色的水平带是 IDA 的 阅读全文
posted @ 2018-08-13 15:33 Sch01aR# 编辑
摘要:生成数据库文件 把要分析的文件用 IDA 打开后,会生成 3 个数据库文件 扩展名分别为 .id0,id1,nam .id0 文件是一个二叉树形式的数据库 .id1 文件包含描述每个程序字节的标记 .nam 文件包含与 IDA 的 Names 窗口中显示的给定程序位置有关的索引信息 点击 OK 后, 阅读全文
posted @ 2018-08-12 23:19 Sch01aR# 编辑
摘要:启动 IDA 启动 IDA,有一个欢迎界面 之后有一个对话框 选择 New 将启动一个对话框来选择将要分析的文件 选择 Go 将使 IDA 打开一个空白的工作区 如果要选择分析的文件,可以直接拖到 IDA 工作区 也可以在菜单栏选择 File -> Open 来打开 选择 Previous 可以打开 阅读全文
posted @ 2018-08-12 20:59 Sch01aR# 编辑
摘要:暂时关闭 iptables 防火墙 暂时关闭 firewall 防火墙 暂时关闭 selinux 安装软件包 查看配置文件 ServerRoot 为配置文件根目录 Listen 为 apache 服务监听的端口 Include 为包含的配置文件 DocumentRoot 为网站根目录 Errorlo 阅读全文
posted @ 2018-08-12 14:33 Sch01aR# 编辑
摘要:rpm 是 Red-Hat Package Manager(rpm 软件包管理器)的缩写 rpm 的命名规则: 第一部分为 rpm 软件包的名称,第二部分是版本号,第三部分是版本发布次数,第四部分是软件包适用的平台 -i:安装该软件包 -v:显示安装的详细信息 -h:显示安装的进度 也可以直接安装网 阅读全文
posted @ 2018-08-11 13:47 Sch01aR# 编辑
摘要:锁定关键的系统文件可以防止服务器提权后被篡改 对启动文件和账号密码文件进行加锁 这些文件上锁后,任何用户都不能对这些文件进行修改和删除 root 用户强制保存退出也不行 如果想对这些文件进行操作的话,可以先对这些文件解锁,修改后再加锁 对这些文件解锁 可以把 chattr 改名,防止被黑客利用 阅读全文
posted @ 2018-08-10 17:17 Sch01aR# 编辑
摘要:进程是程序的一次动态执行 守护进程是在后台运行并提供系统服务的一些进程 当一个进程创建另一个进程时,创建新进程的进程称为新进程的父进程,新进程称为子进程 ps:查看当前进程的信息 该终端为 bash 进程,ps 命令为 ps 进程 一个终端为一个 bash 进程,一条命令为一个进程 ps aux:查 阅读全文
posted @ 2018-08-10 16:44 Sch01aR# 编辑
摘要:free 可以查看内存信息,默认以 KB 为单位 以 MB 为单位 以 GB 为单位 Mem 为内存,Swap 为交换空间 total 为总共的内存,used 为已经分配出去的内存,free 为空闲的内存,shared 为共享,buff/cache 为缓冲区,available 为可用的内存 Mem 阅读全文
posted @ 2018-08-10 11:42 Sch01aR# 编辑
摘要:top 命令动态地查看进程 运行结果 16:58:25 为当前时间,up 1:30 为开机了一个半小时,3 users 为当前有 3 个用户 load average: 0.00, 0.01, 0.05 为平均负载,0.00 为 1 分钟的,0.01 为 5 分钟的,0.05 为 15 分钟的 Ta 阅读全文
posted @ 2018-08-09 17:31 Sch01aR# 编辑
摘要:init 一共有 7 个模式: 0:关机 1:单用户模式 2:多用户模式,跟 3 一样但是没有网络 3:多用户模式 4:没有使用,给开发用的 5:图形化,默认 6:重启 关机 重启 多用户模式 切换到命令行模式 查看运行的级别 第一个 5 为上次的运行级别,第二个 3 为这次的运行级别 切换到图形化 阅读全文
posted @ 2018-08-09 15:39 Sch01aR# 编辑
摘要:vim 编辑器有三个模式:命令行模式、编辑模式和扩展模式 在命令行模式下,按 i 或 a 或 o 键进入编辑模式;按 : 进入扩展模式 在编辑模式下,按 Esc 键进入命令行模式;按 Esc 键,再按 : 进入扩展模式 在扩展模式下,按 Esc 键进入命令行模式;按 Esc 键,再按 i 或 a 或 阅读全文
posted @ 2018-08-08 19:10 Sch01aR# 编辑
摘要:归档 归档就是将多个文件或目录合并成一个文件 归档的目的就是方便备份、还原及文件的传输操作 tar 命令:将多个文件或目录归档到一个文件中,可以根据需要只还原归档文件中的某些指定的文件 c:创建,v:显示细节,t:查看内容,x:解包,f:指定文件,C:指定目录,g: 创建一个 tar 文件 查看 t 阅读全文
posted @ 2018-08-08 16:12 Sch01aR# 编辑
摘要:>:左边命令的结果覆盖右边文件的内容 cat 命令,把文件的内容覆盖另一个文件中的内容 把两个文件的内容合并到一个文件中 echo 命令 whoami 命令 >>:把左边命令执行的结果追加到右边文件的末尾 echo 命令 whoami 命令 cat 命令,把一个文件的内容追加到另一个文件的后面 管道 阅读全文
posted @ 2018-08-08 14:39 Sch01aR# 编辑
摘要:对文件的权限管理 ls -l,也可以用 ll 命令查看文件权限的相关信息 第一列“-rw-r--r--.”为权限信息,权限信息的最后一个点表示为在安全环境下创建的 第二列“1”为硬链接数,第三列“root”为属主,第四列“root”为属组,第五列“18”为文件大小 第六、七、八列“Aug 6 00: 阅读全文
posted @ 2018-08-07 22:04 Sch01aR# 编辑
摘要:useradd:新增一个用户 useradd 几个常用的参数: -u:指定用户的 uid -g:指定用户所属的组 -d:指定用户的家目录 -c:指定用户的备注信息 -s:指定用户所用的 shell 创建一个 admin 用户,uid 为 1006,所属的组为 test,家目录为 /home/abcd 阅读全文
posted @ 2018-08-07 14:02 Sch01aR# 编辑
摘要:创建一个用户会与 6 个文件相关 /etc/passwd 储存了所有用户的相关信息 第一行中,从左往右 root 为用户名,: 为分隔符,x 为密码,0 为 uid,0 为 gid,root 为用户的描述信息,/root 为家目录,最后一列是用户的 shell,/bin/bash 为可以登录系统,/ 阅读全文
posted @ 2018-08-06 18:54 Sch01aR# 编辑
摘要:根目录 “/”:Linux 系统中最高层的目录 这个就是根目录 用 / 表示根目录 bin 目录:存放可执行文件 bin 目录下的文件都是平常使用的命令 在 Linux 系统中,一切都是文件 sbin 目录:存放系统的可执行文件 这些文件也是终端命令 dev 目录:存放设备文件的目录 该目录中存放着 阅读全文
posted @ 2018-08-05 23:00 Sch01aR# 编辑
摘要:Alt+Ctrl+F[1~6]:切换虚拟终端 如果要切换到第 2 号虚拟终端的话,按 Alt+Ctrl+F2 要切换回去的话,按 Alt+Ctrl+F1 #:为 root 用户的系统提示符 $:为普通用户的系统提示符 init 0:关机 普通用户不能直接关机,用 root 用户能直接关机 exit: 阅读全文
posted @ 2018-08-04 22:37 Sch01aR# 编辑
摘要:包中有一个或多个模块文件 像该目录一样,bin 和 conf 就是包,在 Python2 中有 __init__.py 文件才算是包 导入包 main.py 文件导入 conf 包 __init__.py main.py 运行结果 在根目录导入包中的模块 程序主入口 main.py 调用 bin 包 阅读全文
posted @ 2018-08-04 15:31 Sch01aR# 编辑
摘要:读写模式: 读写模式: r:只读模式(如果没指定模式,默认为只读模式) 运行结果 如果对同一个文件句柄连续进行 read() 操作的话,只有第一个 read() 操作有内容,其余的都是空白的 运行结果 因为 read() 操作是连续的 readline() 进行一行一行地读取 运行结果 因为每一行末 阅读全文
posted @ 2018-08-03 16:58 Sch01aR# 编辑

点击右上角即可分享
微信分享提示