libc

2024-06-15 07:08
文章标签 libc

本文主要是介绍libc,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. libc
(1). libc是Standard C library的简称,它是符合ANSI C标准的一个函数库。
    libc库提供C语言中所使用的宏,类型定义,字符串操作函数,数学计算函数以及输入输出函数等。
    正如ANSI C是C语言的标准一样,libc只是一种函数库标准,每个操作系统都会按照该标准对标准库进行具体实现。
    通常我们所说的libc是特指某个操作系统的标准库,比如我们在Linux操作系统下所说的libc即glibc。glibc是类Unix操作系统中使用最广泛的libc库,它的全称是GNU C Library。
(2). 类Unix操作系统通常将libc库作为操作系统的一部分 (被视为操作系统与用户程序之间的接口)

    libc库不仅实现标准C语言中的函数,而且也包含自己所属的函数接口。比如在glibc库中,既包含标准C中的fopen(),又包含类Unix系统中的open()。在类Unix操作系统中,如果缺失了标准库,那么整个操作系统将不能正常运转。在Android也是一样的:
    而Windows系统并不将libc库作为整个核心操作系统的一部分。通常每个编译器都附属自己的libc库,这些libc既可以静态编译到程序中,又可以动态编译到程序中。也就是说应用程序依赖编译器而不是操作系统。
(3). 封装函数
    在Linux系统中,glibc库中包含许多API,大多数API都对应一个系统调用,比如应用程序中使用的接口open()就对应同名的系统调用open()。
        glibc库中通过封装例程(Wrapper Routine)将API和系统调用关联起来。
        API是头文件中所定义的函数接口,而位于glibc中的封装例程则是对该API对应功能的具体实现。
    事实上接口open()所要完成的功能是通过系统调用open()完成的,因此封装例程要做的工作是先将接口open()中的参数复制到相应寄存器中,然后引发一个异常,从而系统进入内核去执行sys_open(),最后当系统调用执行完毕后,封装例程还要将错误码返回到应用程序中。
    【注意】函数库中的API和系统调用并没有一一对应的关系。应用程序借助系统调用可以获得内核所提供的服务,像字符串操作这样的函数并不需要借助内核来实现,因此也就不必与某个系统调用关联。
    也不是必须通过封装例程才能使用系统调用,syscall()和_syscallx()两个函数可以直接调用系统调用。
2. pthread
    bionic libc包含了pthread,pthread另有标准定义,大家也可以参考。
3. dlmalloc
    KK及以前版本用的是dlmalloc作为malloc/free的分配器,学习dlmalloc对于堆内存管理是非常必要的。具体资料可以到网络搜索。
结语
    libc是linux/Android最基础的库,掌握它将更好理解NE。
    

这篇关于libc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062756

相关文章

Patlibc———更快捷的更换libc

起初是为了简化做pwn题目时,来回更换libc的麻烦,为了简化命令,弄了一个小脚本,可以加入到/usr/local/bin中,当作一个快捷指令🔢 这个写在了tools库(git clone https://github.com/CH13hh/tools.github.io )里面,如果有需要的话,可以随时下载,也可以提出一些优化 patlibc 安装与使用 patlibc 是一个用于简便替

CCS报错:error: cannot find file “libc.a“+CCS安装包

1、编译工程出现报错以下报错信息: error: cannot find file "libc.a" warning: automatic RTS selection:  attempt to automatically link in index    library "libc.a" failed; file not found warning: entry-point symbol "_c

Linux升级lib64中的libc.so.6导致所有命令失效

ls: relocation error: libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference 升级Glibc后出现所有shell命令都不可用 # systemctl statussystemctl

seed-labs(return-to-libc)

软件安全-return-to-libc 概要攻击环境攻击阶段找到system()函数的地址找到字符串/bin/sh的地址 第二部分 return-to-libc函数的序言 返回导向编程problems 概要 缓冲区溢出漏洞是把恶意代码注入到目标程序栈中发动攻击。为了抵御这种攻击,操作系统采用一个称为不可执行栈 的防御措施。这种防御措施能被另一种无须在栈中运行代码的攻击方法绕过,这

泄漏libc基地址

拿libc基地址 方法一:格式化字符串 格式化字符串,首先确定输入的 AAAA 在栈上的位置(x)。使用 elf.got[fun] 获得got地址。利用格式化字符串,构造payload泄漏got地址处的值,recv接受到的字符串中,[4:8]即为fun函数的地址fun_addr。 payload = p32(got) + b’%x$s’fun_address = u32(p.recvuntil

关于libc和glibc

libc是Linux下的ANSI C的函数库,glibc是gnu发布的libc库。 (1)从(http://bbs.csdn.net/topics/390595998?page=1#post-395610878)二楼的回答: “ 标准库是一个标准 glibc是标准库的一个实现 kernel没有使用C库 如果我们编写一个用户级的C程序,那么我们到底是用libc还是glibc 中的库函数呢?这

libc、glibc与gcc

转http://blog.163.com/dragon_sjl@126/blog/static/100473339201107101517380/   1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。 Linux系统下

ubuntu重安装libc

问题 ubuntu20.04 默认libc为2.31,使用某种方式升级到了2.35后,再回到2.31。 步骤 更新 libc-bin sudo apt-get download libc-bin# 上面的命令会下载 libc-bin_2.31-0ubuntu9.15_amd64.deb 包chmod a+x libc-bin_2.31-0ubuntu9.15_amd64.debsudo

ubuntu查看libc版本

查看版本 查看ldd ldd --version 查看libcxx strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX 查看libc getconf GNU_LIBC_VERSION# 或strings /usr/lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC