首页
学习
活动
专区
圈层
工具
发布

rop练习--split

用rabin2 -I 来查看程序的架构等信息,其实用file就可以。 ? 用rabin2 -izz 来查找信息,用strings也是可以的。 ? 然后用checksec查看一下防护措施: ?...很明显s数组是0x20的大小,而后面的fgets却接受了96大小的数据。 usefulFunction函数: ? 竟然还有这种函数,好吧,我是看腾讯玄武每日推送打开这篇文章的。。。...rop的步骤: 利用fgets()来填充buffer,将返回地址覆盖为pwnme的地址 建立rop链把’/bin/cat flag.txt’传入RDI寄存器 调用system() exp.py # coding...:0x20+8(rbp)=0x28=40个偏移 info("pattern: %r", pattern) info("offset: %d",offset) rop_chain = p64(pop_rdi_ret...) rop_chain += p64(cat_addr) rop_chain += p64(system_addr) rop_chain += p64(fake_ret) padding = cyclic

94440

gets 、getchar 、fgets 、scanf的用法

3.fgets   从文件或标准输入接收一串字符,遇到’\n’时结束,把’\n’也作为一个字符接收;把接收的一串字符存储在形式参数指针指向的空间,并在’\n’后再自动添加一个’\0’。...5.fgets用法 原型:fgets(buf,sizeof(s),stdin) 功能:从目标文件流 file 中读取 n-1 个字符,放入以 buf 起始地址的内存空间中。...我们知道,对于 gets 函数,它的任务是从 stdin 流中读取字符串,直至接收到换行符或 EOF 时停止,并将读取的结果存放在 buffer 指针所指向的字符数组中。...如果是从键盘上读入数据,可以使用 stdin 作为该参数,如下面的代码所示: int main(void) { char buffer[11]; fgets(buffer,11,stdin); printf...stdin是标准输入(也就是键盘输入),C标准库里面的一个全局变量stdin也是FILE*类型的,因此在使用FILE*类型作为参数的地方,可以使用stdin*/ printf("%s\n%s\n",str1

4K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    fscanf读取一行字符串-C语言文件流(字节流) IO 操作(二) —— 初识“流”以及文件的顺序读写(f

    按照处理的数据单位不同,可以分为字节流、字符流;按照数据流的方向不同,可以分为输入流(从外设读取信息)、输出流(向外设输出信息)。   2、 为什么会有“流”的概念?   ...fgetc 的函数声明如下:   第一个参数:任意输入流,文件流或者标准输入流(即文件指针或者stdin)   返回值:调用成功返回读取到的字符的ASCII码,调用失败或者到达文件尾返回EOF   .../ fputs) (1) fgets 函数   fgets 的作用是从流或者标准输入(键盘)中获取多个字符。...fgets 的函数声明如下:   第一个参数:存储读取到的字符串   第二个参数:要读取的字符个数   第三个参数:任意输入流,文件流或者标准输入流(即文件指针或者stdin)   返回值:读取成功则返回读取到的字符串地址...值得注意的是,如果存在多行, 调用 fgets 读取时,读取完第一行的所有字符,才会转到第二行开始读取,并不是 每调用一次 fgets 就换一行。

    1.7K30

    C 标准库基础 IO 操作总结

    像 FILE* 这样的文件指针称为句柄(Handle)。 打开文件操作是对文件资源进行操作的,所以有可能打开文件失败,所以在打开函数时一定要判断返回值,如果失败则返回错误信息,以方便快速定位错误。...中定义的全局变量,在 stdio.h 中声明,printf 向 stdout 写,而 scanf 从 stdin 读,用户程序也可以直接使用这三个文件指针。...不过 strcpy 程序员还是可以避免,而 gets 的输入用户可以提供任意长的字符串,唯一避免方法就是不使用 gets,而使用 fgets(buf, size, stdin) fgets 函数从 stream...如果文件一行太长,fgets 从文件中读了 size-1 个字符还没有读到 ‘\n’,就把已经读到的 size-1 个字符和一个 ‘\0’ 字符存入缓冲区,文件行剩余的内容可以在下次调用 fgets 时继续读...或从行缓冲的文件中读取,且这次读操作会引发系统调用从内核读取数据,那么会读之前自动 flush 所有行缓冲 程序退出时通常也会自动 flush 缓冲区 如果不想完全依赖自动的 flush 操作,可以调用

    1.1K30

    C语言常见的文件操作函数总结

    细节 ①在从文件读取时判断结束的条件是EOF,但从字符串读取时,判断条件则为'\0'(字符串默认以'\0'结尾); ②注意缓冲区溢出问题,如下方示例中以char [200]数组sbuffer接受读取到的字符...参数:str,用于存储读取数据的字符数组(缓冲区);num,要读取的最大字符数;stream,输入流如 stdin 或文件指针。 返回值:成功返回str指针,失败返回NULL。...2)读取的字符串会以 \0 结尾 3)为什么读取num-1个字符?因为要给\0留一个 如果事先不知道文件中有多少字符,该如何设置缓冲区大小?...作用:从文件读取格式化输入,即从文件中读取数据。...; fscanf和scanf的区别与联系 ①fscanf可以从任意文件流中读取,而scanf只能从stdin标准输入流中读取; ②fscanf需要检查文件指针是否有效; ③scanf是fscanf的特例

    28610

    文件的顺序读写——顺序读写函数——fgets、fgetc、fputs、 fputc

    一、fgetc和fputc函数 1.1 fputc 返回类型int: 如果成功读取字符,返回的是字符的ASCII码值——char 如果读取失败或者遇文件末尾,则返回EOF(-1) ——int 为了统一...该函数从指定的地址 (str) 开始复制,直到到达终止 null 字符 ('\0')。此终止 null 字符不会复制到流中。...num:要复制到 str 中的最大字符数(包括终止 null 字符)。 stream流: 指向标识输入流的 FILE 对象的指针。 stdin 可以用作从标准输入读取的参数。...注意: 从流中读取字符,并将它们作为字符串存储到 str 中,直到读取 (num-1) 个字符(第num个字符会被自动读成‘\0’)或到达换行符或文件末尾,以先发生者为准。...换行符‘\n’ 使 fgets 停止读取,但它被函数视为有效字符,并包含在复制的字符串中。 空字符会自动附加到 str 的字符之后。

    83510

    【C】语言文件操作(一)

    的内容, 剩下内容将放到【C】语言文件操作 (二)中介绍 1.为什么使用文件 使用文件可以将数据直接存放在电脑的硬盘上,使数据持久化。...fgets文本行输入函数 fgets fgets读取内容时会将终止符\0认为是其中的内容,实际读取的是num-1个元素,剩下一个为\0。...下一次读取会从之前读取结束的位置开始 如果读取正常,返回的是存放读取到的数据的地址 如果读取失败,返回NULL char * fgets ( char * str, int num, FILE...是数据 从文件流以一定的格式读取数据 如果读取正常,返回的是格式串中指定的数据的个数 如果读取失败,返回的是小于格式串中指定的数据的个数 struct S { char name[20]; int...- 屏幕 这三个流的类型是FILE*类型的,就有一个FILE*的指针与流对应 那么当从键盘输入数据时就传stdin ,当从屏幕输出数据的时候就传stdout。

    35120

    【C】文件操作

    由上面我们可以看到r+在写时并不清空已有的内容, 但是会从文件开头开始写, 写入的内容会覆盖已有内容. r, w, a, b, + 的解释 mode一般由上面5个字符组成, 有些可能还会使用t, 下面是该它们的含义...stdin) #define getc(__stream) fgetc(__stream) fgets 该函数的原型为: char * fgets ( char * str, int num, FILE...* stream ); fgets从stream中读取内容到str, 当满足下面任意一个条件时完成读取操作: 读取了num-1个字符 读到了换行符(newline character) 读到了文件结尾...读取完成后会在str后面追加上 终止null字符 (即\0), 这也是第一条为什么只读 num-1 个字符的原因. 函数返回值是一个指向str的指针....(回车)作为读取完成的标志, 下面是该函数的原型 char * gets ( char * str ); 下面是一个使用示例: void test_gets() { char string [256

    75910

    C语言进阶-文件操作超详解

    目录 为什么使用文件 什么是文件 分类(从文件功能的角度) 文件名 文件的打开和关闭 文件指针 fopen和fclose函数 打开方式表 文件的顺序读写 顺序读写函数表 什么是输入输出流 fgetc/fgetc...文件读取结束的判断 feof函数 ferror函数 读取结束判断方向  文件缓冲区 ---- 前言 ----  本章主要讲解: 掌握C语言的文件操作和使用 文件操作各种函数的基本使用 为什么使用文件...int fputs( const char *string, FILE *stream ); 注意: fgets函数功能为从流中读取一个字符串到相应的存储位置;第一个参数为获取到字符串的存储的位置.../打印出读取后的字符串 fclose(pf); pf = NULL; return 0; } 特别注意: fgets(str, stdin)==gets(str); fputs(str,...,所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块“ 文件缓冲区 ” 从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。

    1.1K20

    C语言:文件操作

    为什么使用文件 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件,因为文件是存放在硬盘上的...那是因为C语⾔程序在启动的时候,默认打开了3个流: stdin -- 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。...} fgetc函数示范(读字符) 读取正常的时候,返回读取到的字符的ASCII码值 读取失败的时候,返回EOF EOF是一个文件的结束标志 下面这个代码我们可以看到从文件里读取了5个字符。...函数示范(读字符串) 这个函数是从文件里,读取字符串出来 下面这代码,我们要读取3个字符,我们可以看到实际上只读取了2个字符,编译器会在后面加个\0 下面这个代码,没有读取到w,这是为什么呢,因为这个函数是文本行的读取...,定位文件指针,SEEK_SET从文件开头向后偏移了6,读取了后面的3个hhh 从光标位置偏移 当我们读取了a和b光标会在b的后面,定位文件指针,SEEK_CUR从光标的位置向后面偏移4个,读取了后面的

    70310

    初识C语言·文件操作

    当我们运行程序的时候,程序一旦结束,在内存中存储的数据也会被销毁,我们如果想要保存数据,以方便下一次使用的话,就需要用到文件,也就是说,文件是可以用来保存数据的。 那什么是文件呢?...,就只会占4个字节,如果是ASCII码值的形式存储,那么就会占5个字节,1占一个字节,其余的每个0占一个字节 00000000 00000000 00100111 00010000 当我们使用二进制存储的时候...fgets和gets函数是非常不像的,fgets函数有三个参数: char * fgets ( char * str, int num, FILE * stream ); fgets函数会从流里面读取num...都可以做,fprintf同理,fscanf就比scanf多了一个参数,fscanf是从文件中读取数据,如果第一个参数是stdin,也就是标准输入流的话,就是从键盘里面输入数据了,fprintf同理可得,...", ch); fclose(pf); pf = NULL; return 0; } 这就是从文件里面读取数据,如果我们想要从键盘读取,只需把流换成stdin就行了,那么这是读文件的操作

    18110

    CC++ (stdio.h)标准库详解

    ,使用在 printf 上使用 format 时打印的相同文本组成一个字符串,但使用 arg 标识的变量参数列表中的元素而不是其他函数参数,并将生成的内容作为 C 字符串存储在由 s 指向的缓冲区中(将...上使用 format 时打印的相同文本组成一个字符串,但使用 arg 标识的变量参数列表中的元素而不是其他函数参数,并将生成的内容作为 C 字符串存储在 s 指向的缓冲区中。...char * fgets ( char * str, int num, FILE * stream ); 规则: 从流中读取字符,并将它们作为 C 字符串存储到 str 中,直到读取 (num-1...,stdin可以用作从标准输入中读取的参数 返回值: 成功:该函数返回 str 失败:返回NULL /* fgets example */ #include int...然后使用 fopen 函数以只读模式打开名为 "example.txt" 的文件,如果打开失败则输出错误信息。接着使用 fgets 函数从文件中读取内容到 buffer,并输出到控制台。

    1.5K10

    流动的代码:文件流畅读写的艺术(二)文件顺序读写函数

    } fgets和fputs fgets用于从文件流中读取字符串,其原型如下: char *fgets(char *str, int num, FILE *stream); char *str: 指向用于接收读取到的数据的字符数组的指针...fgets 函数会从指定的文件流 stream 中读取字符,直到发生以下几种情况之一: 读取了 num - 1 个字符。 遇到换行符 \n,换行符也会被读取并存入字符串中。...r"); if (file == NULL) { perror("fopen"); return -1; } // 使用fgets从文件中读取一行...成功时,函数返回非负值;失败时,返回 EOF 需要注意的是,fputs 函数不会为你自动添加换行符 \n,如果需要新的一行开始,则你需要显式地在字符串中包含 \n。...会尝试按照指定的格式从文件流中读取数据,并将读取的数据存储在提供的地址上。

    30810

    【C语言】文件操作

    一、什么是文件 在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。 1....} 四、流的概念 当我们需要写数据到文件,屏幕,网络等等这种外部设备时,对于程序员来说要求太高了,所以抽象出一种 ‘流’ 的概念,程序员只需要把数据写到’ 流 '里面去,至于‘流’中的数据如何传到外部设备...stderr 代码演示: int main() { //从标准输入流中读取数据 int ch = fgetc(stdin); printf("%c\n", ch);...而是应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束。...如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。

    29010

    从零开始学C语言文件操作:理论与代码详解

    C语言程序启动时,会默认打开3个流: stdin - 标准输入流,大多数情况下从键盘输入数据,scanf 函数就是从标准输入流中读取数据的。...当我们打开一个文件时,系统会自动创建一个 FILE 结构的变量,并填充好相关信息,我们不用关心具体细节,只需要通过一个 FILE 指针来操作这个文件就可以了。...在这种系统下,系统会自动在内存中为每个正在使用的文件开辟一块“文件缓冲区” 。 从内存向磁盘输出数据时,数据会先被送到内存中的缓冲区,等缓冲区装满后,才会一起被送到磁盘上。...从磁盘向计算机读入数据时,先从磁盘文件中读取数据到内存缓冲区,装满缓冲区后,再逐个将数据送到程序数据区。缓冲区的大小由C编译系统决定。...当我们调用 fflush 函数刷新缓冲区或者调用 fclose 函数(自动刷新缓冲区)关闭文件时,缓冲区的数据才会真正写入到文件中。

    32010

    CCPP输入输出函数汇总分析

    ()了. getchar() int getchar(void) getchar主要是从标准输入流读取一个字符.默认的标准输入流即stdio.h中定义的stdin.但是从输入流中读取字符时又 涉及到缓冲的问题...它的语法如下: int getc( FILE *stream ); 它接受一个文件指针作为参数,并返回读取到的字符的ASCII码值。如果在读取到末尾时返回EOF。...它等价于调用 getc(stdin)。如果读取成功,它返回读取到的字符的整数值;如果读取失败,它返回 EOF。...该函数的语法如下: char *fgets(char *str, int n, FILE *stream); 其中: str是指向要读取的字符串的指针。 n是指要读取的字符数,包括’\0’。...所指的流中取1行字符-标准输入流(由fp=stdin所指) 原因:同上; 补充:不推荐使用,问题是调用者在使用gets时,不能指定缓冲区buf(用户进程)的长度,这样可能造成缓冲区溢出。

    2.3K20

    C语言——文件操作

    标准流 既然输入输出操作需要通过流来实现,但是当我们从键盘输⼊数据,向屏幕上输出数据,没有打开流 ,这是为什么呢?...事实上,C语⾔程序在启动的时候,默认打开了3个流: stdin - 标准输⼊流。 在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。...stdin、stdout、stderr 三个 流的类型 是: FILE * ,通常称为 ⽂件指针 。 C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作。...我们可以使用它来读文件,如果读取成功就返回读取的字符,如果读取失败就返回文件末尾(EOF)。...//关闭文件 fclose(fp); fp = NULL;//避免fp成为野指针 return 0; } fgets 我们可以知道fgets是从流中获取字符串的,这是一个文本行输入函数,适用于所有的输入流

    49610

    C语言 —— 指尖跃迁 刻印永恒 - 文件操作

    那是因为C语言程序在启动的时候,默认打开了3个流: stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据 stdout - 标准输出流,⼤多数的环境中输出至显示器界...kw=fgetc int fgetc ( FILE * stream ); 从文件指针stream指向的文件中读取一个字符,该字符的ASCII值作为函数的返回值,读取一个字节后光标向后移一个字节,...kw=fgets char * fgets ( char * str, int num, FILE * stream ); 从指定的流 stream 读取一行(每次最多只能从文件中读取一行内容,因为...当读取 (n-1) 个字符时或者读取到换行符时又或者到达文件末尾时,它会停止,具体视情况而定 如果文件中的该行,不足n-1个字符,则读完该行就结束。...:可变参数列表,用于接收读取的数据 fscanf其功能为根据数据格式(format),从输入流(stream)中读入数据,存储到...中,遇到空格和换行时结束,这与fgets有区别,fgets遇到空格不结束

    39510

    【Linux】基础IO——系统文件IO&fd&重定向&理解

    fprintf+w: fgets+r fgets会给字符串结尾添加\0 运行的结果和文件的内容每行都多出了一行,这是因为在读取的时候按行打印,把\n多读了,所以我们可以处理一下\n: a追加 对于...* 所以,我们可以查看到stdin,stout,stderr里面对应的值是多少: 这就很好的解答了为什么open的返回值是从3开始的问题!...因为0,1,2默认被占用,我们的C语言封装了接口,同时也封装了操作系统内的文件描述符。 此外,数字为什么从0,1,2连续的整数,文件描述符的本质是什么?...这也就很好结社了为什么打开文件返回值为3,打开文件内核会描述struct file结构,把对应的地址填充到struct file*fd_array[]数组中的下标中去,又因为0,1,2,默认会被占用,于是从...: 我们所谓的关闭文件只是在表明用户给OS说已经不需要使用了,由OS决定,OS把引用计数减到0时,才被OS真正删除掉。

    77920

    C语言-文件操作这一篇足够

    } 4.2 fgets和fputs char *fgets( char *string, int n, FILE *stream ); 这个函数就是用来读取一个字符串的,参数有三个,第一个就是我们用来存放从文件读取过来的字符串的地址...二、SEEK_END,这是指结束位置,三、SEEK_SET,这是指起始位置 它的返回值:(1)成功返回0(2)失败返回非0 具体使用如下所示: int main() { FILE* pf = fopen...7.文件读取结束的判定 7.1 如何判定文件结束 我们可以使用fgetc、fgets、fread等函数的返回值进行判定 fgertc:函数在读取失败结束的时候,会返回EOF,正常读取的时候,返回的是读取到的字符的...它的返回值: 1)如果读取到最后正常结束就是返回一个非0值 2)没有读到最后就是返回的是0,此时文件读取失败了 注意:在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束...所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块“文件缓冲区” 其实就是当我们的程序想要把数据存储到文件当中会先放到文件缓冲区当中,只有文件缓冲区存储满之后才会从文件缓冲区中向文件存储数据

    17610
    领券