将二进制文件作为目标文件中的一个段

news2024/9/20 22:43:27

将二进制文件作为目标文件中的一个段

python 生成2进制文件

import sys

def testFile(fileName):
    # --
    with open(fileName, mode='wb+') as hexFile:
        bBuf = bytes.fromhex("0123456789abcdef")
        print("bBuf:",bBuf.hex())
        len = hexFile.write(bBuf)
        print ("len:",len)

        test = ("my test code").encode()
        hexFile.write(test)

    with open(fileName, mode='rb') as hexFile:
        bBuf = hexFile.read()
        hexCode=bBuf[0:8]
        print("hexCode:",hexCode.hex())

        strBuf = bBuf[8:]
        print("strBuf:",strBuf.decode())
    pass

if __name__ == "__main__":
    try:
        testFile("tf.bin")
    except Exception as e:
        print(e)
    pass      

生成 tf.bin :
写入16进制数据0123456789abcdef
写入字符串my test code
在这里插入图片描述

使用编译工具链生成目标文件

  • 我这使用 Qt -mingw-64 工具链:
    打开powershell 输入命令配置临时环境变量:
$env:Path = "C:\Qt\Qt5.12.12\Tools\mingw730_64\bin;" + $env:Path

使用 tf.bin 生成目标 tf.o

objcopy.exe -I binary -O pe-x86-64 -B i386:x86-64 tf.bin tf.o

-I指定源文件的格式
-O指定输出的目标文件的格式
-B指定输出目标文件的架构

查看效果:

PS D:\workspace\Python\PySwigLib> objdump -st tf.o

tf.o:     file format pe-x86-64

SYMBOL TABLE:
[  0](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000000 _binary_tf_bin_start
[  1](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000014 _binary_tf_bin_end
[  2](sec -1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x0000000000000014 _binary_tf_bin_size

用vscode 插件 Hex Editor 查看
在这里插入图片描述

用 c代码测试

testfile.c

#include "stdio.h"
extern __int64 _binary_tf_bin_start;
extern __int64 _binary_tf_bin_end;
extern __int64 _binary_tf_bin_size;
int main(int argc, char *argv[])
{
    int index = 0;

    char * start = (char *)&_binary_tf_bin_start;
    char * end = (char *)&_binary_tf_bin_end;
    __int64*  size = (&_binary_tf_bin_size);

    printf("_binary_tf_bin_start:0x%x\n",start);
    printf("_binary_tf_bin_end:0x%x\n",end);
    printf("_binary_tf_bin_size:0x%x\n",size);

    while (start < end) {
        printf("index %d :%02x\n", index, 0xff&(*start));
        start++;
        index++;
    }
    printf("size: %d\n", size);
    return 0;
}

编译生成 可执行文件test.exe

gcc.exe .\testfile.c tf.o -o test.exe

运行:

PS D:\workspace\Python\PySwigLib> .\test.exe
_binary_tf_bin_start:0x403010
_binary_tf_bin_end:0x403024
_binary_tf_bin_size:0x14
index 0 :01
index 1 :23
index 2 :45
index 3 :67
index 4 :89
index 5 :ab
index 6 :cd
index 7 :ef
index 8 :6d
index 9 :79
index 10 :20
index 11 :74
index 12 :65
index 13 :73
index 14 :74
index 15 :20
index 16 :63
index 17 :6f
index 18 :64
index 19 :65
size: 20

可见写入的bin数据,连接生成 test.exe 之后,可以通过符号
_binary_tf_bin_start
_binary_tf_bin_end
_binary_tf_bin_size
获取其内容

tf.o 生成 tf.dll 动态库

ld tf.o -o tf.dll

链接动态库使用:

 gcc.exe .\testfile.c tf.dll -o ./test.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3搭建记录

一、初始化项目&#xff1a;项目名称vue3-element-admin npm init vitelatest vue3-element-admin --template vue-ts 二、整合Element-Plus 1.本地安装Element Plus和图标组件 npm install element-plus npm install element-plus/icons-vue 2.全局注册组件 // main.ts imp…

【C#】async关键字修饰后有无await的影响

文章目录测试总结拓展&#xff1a;js的async await问题参考测试 来自微软官网的说法&#xff1a; 异步方法通常包含 await 运算符的一个或多个匹配项&#xff0c;但缺少 await 表达式不会导致编译器错误。 如果异步方法未使用 await 运算符标记悬挂点&#xff0c;则该方法将作…

RK3568工业开发板工控板说明

说明HW356X-GKA是采用中高端的通用型 SOC&#xff0c;一款基于Rockchip公司RK3568处理器的工控主板。主板标配处理器为Cortex-A55四核&#xff0c;最高主频2GHz的RK3568处理器&#xff0c;内置4GB DDR4内存(最大8GB)&#xff0c;32GB eMMC存储。集成4核 arm架构 A55 处理器和Ma…

记录使用ROS驱动USB相机

参考https://blog.csdn.net/weixin_48657767/article/details/126054121?spm1001.2014.3001.5502cmake编译时有bug&#xff0c;缺包&#xff0c;安装对应的包sudo apt-get install ros-melodic&#xff08;对应ros版本&#xff09;-****&#xff08;对应包名&#xff0c;下划线…

OpenGL学习日记之光照计算

引言 现实生活中的光照极其复杂&#xff0c;而且会收到很多因素的影响&#xff0c;是我们当前计算机的算力无法模拟的。因此我们会根据一些简化的模型来模拟现实光照&#xff0c;这样在可以模拟出近似的光照感受&#xff0c;但是又没有那么复杂的计算。 常用的光照模型有&…

27 pandas 数据透视

文章目录pivot_table 函数1、index需要聚合的列名&#xff0c;默认情况下聚合所有数据值的列2、values在结果透视的行上进行分组的列名或其它分组键【就是透视表里显示的列】3、columns在结果透视表的列上进行分组的列名或其它分组键4、Aggfunc聚合函数或函数列表&#xff08;默…

【1】linux命令每日分享——mkdir

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

【Spring】难理解的Aop编程 | 入门?

作者&#xff1a;狮子也疯狂 专栏&#xff1a;《spring开发》 坚持做好每一步&#xff0c;幸运之神自然会驾凌在你的身上 目录一. &#x1f981; 前言二. &#x1f981; 常见概念2.1 常见术语2.2 AOP入门Ⅰ. &#x1f407; 功能场景Ⅱ. &#x1f407; 实现过程2.3 通知类型Ⅰ.…

XXL-JOB分布式任务调度框架(三)-集群部署

文章目录 1.引言2.集群服务启动3.反向代理4.总结1.引言 XXL-JOB有中心化的思想,一旦调度中心挂机会导致整体不可使用,所以要引入集群。 需要考虑点: db配置保持一致登录账号配置保持一致集群机器时钟保持一致(单机集群可忽视)2.集群服务启动 在是在同一台机器中,并且在…

wav2vec 2.0:一种自监督的语音识别方法

总体框架&#xff1a; 主要分为2个大模块&#xff1a;1:语音特征提取模块 2:语音特征向量融合模块 1:特征提取模块 输入&#xff1a;音频 输出&#xff1a;音频特征向量 过程&#xff1a; 1&#xff09;跟具体采样率有关&#xff0c;如果一段1S的音频&#xff0c;采样率是1…

踔厉奋发·勇毅前行 | 2023广和通中国区代理商大会成功召开

2月16日&#xff0c;以“踔厉奋发 勇毅前行”为主题的2023广和通中国区代理商大会暨颁奖晚宴于深圳盛大开启并顺利落幕。广和通CEO应凌鹏、中国区销售部副总裁陈绮华等高层领导出席本次会议并发表演讲&#xff0c;与来自全国各地的代理商合作伙伴齐聚一堂&#xff0c;共话商机。…

云原生周刊 | 2023 年热门:云 IDE、Web Assembly 和 SBOM | 2023-02-20

在 CloudNative SecurityCon 上&#xff0c;云原生计算基金会的首席技术官 Chris Aniszczyk 在 The New Stack Makers 播客的这一集中强调了 2023 年正在形成几个趋势&#xff1a; 随着 GitHub 的 Codespaces 平台通过集成到 GitHub 服务中获得认可&#xff0c;云 IDE&#xf…

【SQL】MySQL秘籍

chihiro-notes 千寻简笔记 v0.1 内测版 &#x1f4d4; 笔记介绍 大家好&#xff0c;千寻简笔记是一套全部开源的企业开发问题记录&#xff0c;毫无保留给个人及企业免费使用&#xff0c;我是作者星辰&#xff0c;笔记内容整理并发布&#xff0c;内容有误请指出&#xff0c;笔…

用户行为分析项目MySQL+Tableau

文章目录1. 项目背景及目的1.1 项目背景1.2 项目目的2. 理解数据3. 数据预处理3.1 字段调整3.2 数据清洗3.2.1 空值3.2.2 重复值3.2.3 异常值4. 数据分析4.1 人4.1.1 获客情况&#xff08;PV、UV、PV/UV)4.1.2 留存情况&#xff08;留存率、跳失率&#xff09;4.1.3 行为情况&a…

数据在内存中的存储【上篇】

文章目录⚙️1.数据类型的详细介绍&#x1f529;1.1.类型的基本归类⚙️2.整型在内存中的存储&#x1f529;2.1.原码、反码、补码&#x1f529;2.2.大小端的介绍⚙️1.数据类型的详细介绍 &#x1f973;基本的内置类型 &#xff1a; &#x1f4a1;char ---------- 字符数据类型…

kubeadmin安装k8s集群

目录 一 、环境部署 1、服务器规划 2、环境准备 二、所有节点安装docker 1、配置yum源&#xff0c;安装docker 2、配置daemon.json文件 三、所有节点安装kubeadm、kubelet 和kubectl 四、部署k8s集群 1、查看初始化需要的镜像 2、导入镜像 3、初始化kubeadm 3.1 方…

【gt+】RS485详解

这里写目录标题RS232与RS485TTL和RS485电平转换平衡传输收发控制主机轮询手动带隔离的RS485电路自动切换电路RS485收发器发送器接收器网络安装电阻匹配接地问题网络失效保护RS232与RS485 RS232接口标准出现较早。 接口的电平值较高&#xff0c;易损坏接口电路的芯片&#xff…

Hive3 安装方式详解,datagrid自定义驱动连接hive

1 Hive的安装方式 hive的安装一共有三种方式:内嵌模式、本地模式、远程模式。 元数据服务(metastore&#xff09;作用是&#xff1a;客户端连接metastore服务&#xff0c;metastore再去连接MySQL数据库来存取元数据。有了metastore服务&#xff0c;就可以有多个客户端同时连接…

【部署】项目正式服部署更新

chihiro-notes 千寻简笔记 v0.1 内测版 &#x1f4d4; 笔记介绍 大家好&#xff0c;千寻简笔记是一套全部开源的企业开发问题记录&#xff0c;毫无保留给个人及企业免费使用&#xff0c;我是作者星辰&#xff0c;笔记内容整理并发布&#xff0c;内容有误请指出&#xff0c;笔…

SCRM的全面了解

一、什么是SCRM SCRM&#xff08;Social CRM&#xff0c;社会化客户关系管理&#xff09;&#xff0c;是以用户为中心&#xff0c;通过社交平台与用户建立联系&#xff0c;以内容、活动、客服、商城等服务吸引用户注意力&#xff0c;并不断与用户产生互动&#xff0c;实现用户…