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

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

99440

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

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

    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.2K30

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

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

    1.9K30

    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的特例

    45910

    文件的顺序读写——顺序读写函数——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 的字符之后。

    1.2K10

    【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。

    42520

    【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

    88710

    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.3K20

    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个,读取了后面的

    96710

    【通关文件操作(上)】--文件的意义和概念,二进制文件和文本文件,文件的打开和关闭,文件的顺序读写

    一.文件的意义和概念 1.1--为什么要使用文件?&& 什么是文件?...这是因为C语言程序在启动的时候,默认打开了3个流: stdin - 标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。...0; } 四.文件的顺序读写 在进行文件写的时候,我们会涉及下面这些函数: 函数名 功能 适用于 fgetc 从输入流中读取一个字符 所有输入流 fputc 向输出流中写入一个字符 所有输出流 fgets...失败时返回 EOF (-1),同时会设置流的错误指示器,可以使用 ferror() 检查错误原因。...char * fgets ( char * str, int num, FILE * stream ); 功能: 从 stream 指定输入流中读取字符串,至读取到换行符、文件末尾(EOF

    17110

    【Linux系统】基础IO(上)

    磁盘作为计算机外设的一种,既是输入设备(读取数据)也是输出设备(写入数据)。...例如: 当保存文档时:数据从内存输出到磁盘 当打开文档时:数据从磁盘输入到内存 所有对磁盘文件的操作(创建、读取、修改、删除)本质上都是通过操作系统提供的输入输出(IO)接口完成的。...例如: 标准输入(stdin) → 文件描述符0 标准输出(stdout) → 文件描述符1 标准错误(stderr) → 文件描述符2 对文件的操作本质是进程对文件的操作:文件操作由运行中的进程发起...字符读写 fgetc() / getc() - 读取单个字符 功能:从文件读取单个字符。 参数:FILE* stream。 返回值:成功返回读取的字符(转为 int),文件结束或失败返回 EOF。...字符串读写 fgets() - 读取一行字符串 功能:从文件读取一行字符串。 参数: char* str:存储读取数据的缓冲区。 int n:最大读取长度(含结尾 \0)。

    12010

    初识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就行了,那么这是读文件的操作

    26210

    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.8K10

    文件操作管理

    1.为什么使用文件 我们知道数据是存储在内存中的,当程序退出之后,申请到的内存空间就回收了,数据就丢失了。但如果我们将数据存储到文件中,就可以将数据“永久”保存。 2.什么是文件?...那是因为C语言程序在启动的时候,就默认打开了3个流: stdin - 标准输入流(键盘),在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。...5.5 fgets fgets函数原型(读取数据) char * fgets ( char * str , int num, FILE * stream ); 功能:从stream指定输入流中读取字符串...:fscanf时从指定文件流中读取格式化数据的函数。...在二进制文件读取时,fread()是常用的函数,但对于文件文本读取,通常使用fgets()/fscanf()。

    13810

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

    } 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。...会尝试按照指定的格式从文件流中读取数据,并将读取的数据存储在提供的地址上。

    40410

    【C语言】文件操作

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

    39510

    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.6K20

    C语言基础之【数组和字符串】(下)

    gets()函数尽管它使用简单,但由于其安全性问题,已经在C11标准中被弃用,并建议使用更安全的替代函数(如:fgets()) 从标准输入流stdin中读取一行字符,直到遇到换行符\n或者文件结束符...用于存储输入的字符串 函数的返回值: 成功时,返回指向str的指针 即读取到的字符串的首地址。 失败时,返回NULL 如:遇到文件结束符EOF或者读取过程中发生错误时。...把读取到的字符存储到参数str所指向的字符数组中,并在末尾自动添加字符串结束符\0 如果在读取到size - 1个字符之前就遇到了换行符,fgets()会将换行符也作为字符串的一部分存储到数组中,然后添加...最常见的是使用stdin(标准输入)来从键盘读取数据,也可以是通过fopen函数打开的文件流。 函数的返回值: 如果成功读取,fgets函数返回str,也就是指向存储读取内容的字符数组的指针。...如果打开成功,使用fgets函数从文件中读取一行数据(最多读取MAX_LENGTH - 1个字符),然后输出读取到的内容。 最后关闭文件。

    17010

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

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

    40510
    领券