musl 是一个全新为 Linux 基本系统实现的标准库。特点是轻量级、快速、简单、免费、标准兼容和安全。
0. 序 本篇承接上一篇的动手调试C库-1 ,主要讨论musl-c的动态链接器。 3. overview musl-c的动态链接器代码主要位于ldso/dlstart.c, ldso/dynlink.c。musl-c的动态链接器重定位主要分为三个阶段,第一阶段是_dlstart_c函数,第二阶段是__dls2和__dls2b函数,第三个阶段是__dls3函数。 描述动态库的数据结构是dso, 在d
近年来,musl libc作为一个轻量级的libc越来越多地出现在CTF pwn题之中,其和glibc相比有一定的差距,因此本文我们就musl libc最常考的考点——内存分配,进行musl libc的源代码审计。 不同于glibc多达四五千行代码,大小超过10w字节的malloc.c,musl libc中的malloc.c大小甚至都不到1w字节,其轻量级的特性也使得我们更加容易去阅读它的代码。
g++和gcc是GNU编译器集合中的两个组件,g++是GNU C++编译器,gcc是GNU C语言编译器。这两个编译器都使用glibc作为标准C库,glibc是GNU操作系统的标准C库,为支持C程序提供了许多函数和服务。 简单来说,glibc是C标准库的一个实现,它包括头文件、函数库和其他的应用程序。而g++和gcc则是编译器,它们将源代码编译成可执行文件,通过调用glibc库中的函数来执行程序。
在上一篇文章中,我们详细分析了如何通过musl的内存分配系统实现任意两个地址互相写的利用。本文据此讨论应该如何使用这种方式getshell。 首先看到musl中的_IO_FILE结构体: struct _IO_FILE { unsigned flags; unsigned char *rpos, *rend; int (*close)(FILE *); unsigned char *wen
在上一篇文章中我们学习了musl libc中内存分配的相关知识,了解了重要的数据结构及函数内容。本文将在此基础上进一步分析musl pwn的利用方式。 musl libc利用的核心思想是向free中传入一个假的chunk指针。由于free函数会通过该chunk进行回溯,获取到其所在的group和meta,因此除了构造假chunk外,还需要构造假group和假meta。如果在假meta中合理构造pr
Golang 的一个动态链接依赖问题 upx 是一个压缩二进制的工具,如上图,经过压缩之后,这些 binary 的体积都减少了 46%。 静态链接 CGO 的依赖 如果使用 glibc 的是,是不能静态链接的: root@f88271a666f9:/workspace# go build -ldflags "-linkmode external -extldflags '-static'" ./c
musl is an implementation of the C standard library built on top of the Linux system call API, including interfaces defined in the base language standard, POSIX, and widely agreed-upon extensions. mus
dig into musl 1.数据结构 1.malloc_context struct malloc_context { uint64_t secret;//用于检查meta的合法性 #ifndef PAGESIZE size_t pagesize;//0x1000 #endif int init_done;//是否初始化 unsigned mmap_counter;//用mmap开辟空
1、下载源文件。网址:musl libc 2、解压到一个到不带中文路径的目录下,在该目录下右键新建终端 3、运行配置文件: ./configure 4、编译: make 5、安装: make install 过程中可能会出现permission denied报错,或无法在/usr/下新建目录:执行su,再安装 su 6、配置环境变量: musl默认安装目录是:/usr/local/musl
Python 标准库(Python Standrad Library)中包含了大量有用的模块,同时也是每个标准的 Python 安装包中的一部分。熟悉 Python 标准库十分重要,因为只要你熟知这些库可以做到什么事,许多问题都能够轻易解决。 我们将探索这个库中的一些常用模块。你能在你的 Python 安装包中附带的文档中的“库概览(Library Reference)” 部分中查找到所有模块的全
String string.byte string.char string.dump string.find string.format string.gmatch string.gsub string.len string.lower string.match string.rep string.reverse string.sub string.upper 在st
Object 对象 属性描述对象 Array 对象 包装对象 Boolean 对象 Number 对象 String 对象 Math 对象 Date 对象 RegExp 对象 JSON 对象
所以你们既是神的选民,圣洁蒙爱的人,就要存怜悯、恩慈、谦虚、温柔、忍耐的心。倘若这人与那人有嫌隙,总要彼此包容,彼此饶恕;主怎么饶恕了你们,你们也要怎样饶恕人。在这一切之外,要存着爱心,爱心就是联络全德的。又要叫基督的平安在你们心里作主,你们也为此蒙召,归为一体,且要存感谢的心。(COLOSSIANS 3:12-15) 标准库(8) JSON 就传递数据而言,XML是一种选择,还有另外一种——JS
你们要靠主常常喜乐;我再说,你们要喜乐。当叫众人知道你们谦让的心。主已经近了。应当一无挂虑,只要凡事藉着祷告、祈求和感谢,将你们所要的告诉神。神所赐出人意外的平安,比在基督耶稣里面保守你们的心怀意念。(PHILIPPIANS 4:4-7) 标准库(7) XML XML在软件领域用途非常广泛,有名人曰: “当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风
弟兄们,我不是以为自己已经得着了,我只有一件事,就是忘记背后,努力面前的,向着标杆直跑,要得神在基督耶稣里从上面召我来得的奖赏。(PHILIPPIANS 3:13-14) 标准库(6) urllib urllib模块用于读取来自网上(服务器上)的数据,比如不少人用Python做爬虫程序,就可以使用这个模块。先看一个简单例子: 在Python 2中,这样操作: >>> import urllib>>
凡所行的,都不要发怨言、起争论,使你们无可指摘,诚实无伪,在这弯曲悖谬的世代作神无瑕疵的儿女。你们显在这世代中,好像明光照耀,将生命的道表明出来。(PHILIPPIANS 2:14-15) 标准库(5) “一寸光阴一寸金,寸金难买寸光阴”,时间是宝贵的。 在日常生活中,“时间”这个术语是比较笼统和含糊的。在物理学中,“时间”是一个非常明确的概念。在Python中,“时间”可以通过相关模块实现。 c
凡事不可结党,不可贪图虚浮的荣耀,只要存心谦卑,各人看别人比自己强。各人不要单顾自己的事,也要顾别人的事。(PHILIPPIANS 2:3-4) 标准库(4) heapq 堆(heap),是一种数据结构,引用维基百科中的说明: 堆(英语:heap),是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。 对于这个新的概念,读者不要心慌意乱或者恐惧,因为它本质上不是新东西,