第11节 多文件函数生成位置规律

我把多年的shellcode开发经验浓缩在了这个专题课👩🏻‍💻里,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡。

我的个人主页:https://imbyter.com

一、文件名顺序规律​

多文件项目编译时,函数生成顺序仅与项目中.cpp文件有关,与.h文件无关。

在新建项目中,所有首次创建的cpp文件,在“解决方案资源管理器”中的显示排序,是以文件名首字母,先由0-9,再由a-z从上到下顺序显示。类似如下:

对于上面这个项目,编译后,函数对应关系与PE文件在内存中映射如下:

每个cpp中函数的位置又遵循单文件函数生成位置规律。

但如果对已经创建的cpp文件重命名,当关闭VS项目后,再重新打开项目,就会发现显示的规律仍然符合先0-9,再a-z,但编译的顺序,却不受重命名影响,还是与最初重命名前编译的顺序一致。

二、文件编译日志​

上面所说cpp文件显示顺序与编译顺序的对应,仅仅是表象,真正编译顺序的体现,是在我们编译项目时,输出窗口的显示日志。如上项目的编译过日志如下:

对于新建的项目,首次创建的cpp文件的名字,各文件中函数编译后的顺序完全符合0-9,a-z的顺序。并且,不管如何重命名cpp文件,这个顺序均保持不变。

我们可以从此处的输出日志来查看所有文件最后的编译顺序。

三、*.vcxproj编译顺序规定​

上面“输出日志”的显示结果,其实是由每个项目中项目名.vcxproj这个文件所规定的,如上项目,在test.vcxproj这个文件中有如下定义:

<ItemGroup><ClCompile Include="0.cpp" /><ClCompile Include="1.cpp" /><ClCompile Include="8.cpp" /><ClCompile Include="9.cpp" /><ClCompile Include="a.cpp" /><ClCompile Include="b.cpp" /><ClCompile Include="y.cpp" /><ClCompile Include="z.cpp" />
</ItemGroup>

<ItemGroup>标签下每个<ClCompile>的顺序,就代表了对每个cpp的编译顺序。

如果我们将z.cpp修改到最上面:

<ItemGroup><ClCompile Include="z.cpp" /><ClCompile Include="0.cpp" /><ClCompile Include="1.cpp" /><ClCompile Include="8.cpp" /><ClCompile Include="9.cpp" /><ClCompile Include="a.cpp" /><ClCompile Include="b.cpp" /><ClCompile Include="y.cpp" />
</ItemGroup>

保存文件后,回到项目会有如下提示,点击“全部重新加载(A)”:

重新编译项目,此时会发现z.cpp是最先编译的:


结论:

  1. 多文件函数生成位置,与.h无关,仅与cpp文件有关;
  2. 对首次创建的cpp文件,文件编译顺序与cpp文件名有关,遵循先0-9,再a-z;
  3. 可以通过底部的“输出”窗口查看真实的的cpp编译顺序;
  4. 每个项目项目名.vcxproj中<ItemGroup>标签下<ClCompile>的顺序,决定每个cpp编译顺序。

如果有任何问题,可以在我们的知识社群中提问和沟通交流:

图片​​

一个人走得再快,不如一群人走得更远!🤜🤛


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

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

相关文章

进程创建-fork

demo1代码状态变迁 demo2代码输出到stdout使用管道 demo1 代码 #include <pthread.h> #include <iostream> #include <unistd.h> int main(int argc, char const *argv[]) {// 1.pid_t x fork();// 2.pid_t y fork();// 3.printf("%d %d\n", x…

【C++】STL-list的使用

目录 1、list的使用 1.1 list的构造 1.2 list的遍历 1.3 list capacity 1.4 list element access 1.5 容量相关 list是一个带头双向循环链表 1、list的使用 1.1 list的构造 1.2 list的遍历 list只有两种遍历方式&#xff0c;因为没有operator[] 因为list的双向链表&am…

《建筑抗震设计规程》DB62/T 3055-2020下载

本规程适用于抗震设防分类为乙类、丙类&#xff0c;抗震设防烈度为6度(0.05g)、7度(0.10g、0.15g)、8度(020g、030g)、9度(0.40g)的多高层钢筋混凝土结构及钢-混凝土混合结构、中等跨度钢屋盖结构、门式刚架钢结构、多低层砖砌体结构房屋建筑的抗震设计。 关于甘肃省地方标准《…

01 | 为什么需要消息队列?

哪些问题适合使用消息队列来解决&#xff1f; 1. 异步处理 2. 流量控制 使用消息队列隔离网关和后端服务&#xff0c;以达到流量控制和保护后端服务的目的。 3. 服务解耦 无论增加、减少下游系统或是下游系统需求如何变化&#xff0c;订单服务都无需做任何更改&#xff0c…

【主题广泛|稳定检索】2024年社会科学、公共服务与人文艺术国际会议(SPSHA 2024)

2024年社会科学、公共服务与人文艺术国际会议&#xff08;SPSHA 2024&#xff09; 2024 International Conference on Social Sciences, Public Services, and Humanities and Arts 【会议简介】 本次会议定于2024年在中国的繁华都市——广州召开&#xff0c;汇聚了全球在该领…

如何挑选护眼灯?分享最好的台灯品牌排行榜

作为家长&#xff0c;孩子的健康无疑是我们最为牵挂的事项。然而&#xff0c;通过研究数据显示&#xff0c;我国青少年儿童的近视率高达52.7%&#xff0c;这意味着在每十名儿童中&#xff0c;就有超过半数的孩子可能面临视力问题。这一数据无疑令人警觉。当我们看到孩子们在写作…

Web3加密空投入门:空投类型有哪些?如何避免限制?

今天分享空投如何避免限制以提高效率&#xff0c;增加成功几率&#xff0c;首先我们来了解什么是空投加密&#xff0c;有哪些空投类型。 一、什么是空投加密&#xff1f; 加密货币空投是一种营销策略&#xff0c;包括向用户的钱包地址发送免费的硬币或代币。 加密货币项目使用…

中医揿针的注意事项

点击文末领取揿针的视频教程跟直播讲解 关于揿针的注意事项&#xff0c;我们可以从以下几个方面进行探讨&#xff1a; 01操作前准备 1. 确保针具的清洁和无菌状态&#xff0c;以避免感染。 2. 了解患者的身体状况&#xff0c;如是否有特殊疾病或过敏史&#xff0c;以便选择…

解码管理新趋势:咨询公司如何助力企业破局升级?

随着数字化、智能化技术的不断发展&#xff0c;企业管理的边界正在被重新定义。传统的层级管理正在向扁平化、网络化转变&#xff0c;员工的参与度和自主性得到了前所未有的提升。同时&#xff0c;企业也更加注重数据驱动决策&#xff0c;通过大数据分析来洞察市场变化&#xf…

STM32 PWM 计数器模式和对齐

STM32 PWM 计数器模式和对齐 1. TIM高级定时器简介2. TIM计数模式2.1 向上计数2.2 向下计数2.3 中心对齐模式&#xff08;向上/向下计数&#xff09;2.4 重复计数 3. PWM输出模式3.1 举例看下PWM中心对齐模式&#xff0c;设置参数如下&#xff1a; 4. FOC中PWM相关设置说明4.1 …

SpringBoot对接微信公众平台(1)--- 配置微信公众平台测试号URL并校检

SpringBoot对接微信公众平台&#xff08;1&#xff09;--- 配置微信公众平台测试号URL并校检 说明微信公众号接口测试号申请后端代码实现内网穿透接口测试 说明 这里记录下自己学习SpringBoot对接微信公众平台的成长过程&#xff0c;以防止后面继续踩坑且方便以后直接使用。这…

房价暴跌到头?中国楼市回调信号愈发强烈!

一、房地产市场的繁荣与萧条 在过去的几十年里&#xff0c;中国的房地产市场经历了多次繁荣与萧条的周期。自2015年第二季度起&#xff0c;全国房价开始逐渐攀升&#xff0c;这标志着新一轮房地产市场的繁荣期的开始。以深圳为例&#xff0c;新政出台后&#xff0c;这座城市的…

CSS 实现文本的渐变色

定义一个类 .text-color{/* 创建一个水平方向的颜色渐变 */background: linear-gradient(120deg, #bd34fe 30%,#5c34fe, #41d1ff);/* 将文本透明度设置为0&#xff0c;以便背景渐变可见 */color: transparent;/* 使用背景渐变来填充文本背景 */-webkit-background-clip: text;…

LeetCode 0994.腐烂的橘子:广度优先搜索(BFS)

【LetMeFly】994.腐烂的橘子&#xff1a;广度优先搜索(BFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/rotting-oranges/ 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子…

【Spring】GoF 之代理模式

一、代理模式 在 Java 程序中的代理模式的作用&#xff1a; 当一个对象需要受到保护的时候&#xff0c;可以考虑使用代理对象去完成某个行为 需要给某个对象的功能进行功能增强的时候&#xff0c;可以考虑找一个代理进行增强 A 对象无法和 B 对象直接交互时&#xff0c;也可以…

如何在 Python 中使变量不可继承

1. 问题背景 在 Python 中&#xff0c;子类可以继承父类的属性和方法。但是&#xff0c;有时我们希望子类不能继承父类的某些属性或方法。这种情况下&#xff0c;该如何做呢&#xff1f; 2. 解决方案 解决方案一&#xff1a;使用双下划线前缀 Python 中的双下划线前缀用于表…

仓库管理流程详解(附作业流程图)

仓库管理流程在企业的日常运营中至关重要。它不仅是物资流转的核心环节&#xff0c;更关乎着企业的运营效率、成本控制和客户服务水平。一个高效、规范的仓库管理流程能够确保货物从入库到出库的各个环节有序进行&#xff0c;减少资源浪费和时间成本&#xff0c;同时帮助企业实…

Hive Sampling 抽样函数

Hive Sampling 抽样函数 1.random随机抽样 2.数据块抽样 3.分桶表抽样

【静态分析】软件分析课程实验A2-常量传播和Worklist求解器

Tai-e官网&#xff1a; 概述 | Tai-e 参考&#xff1a; https://www.cnblogs.com/gonghr/p/17979609 -------------------------------------------------------- 1 作业导览 为 Java 实现常量传播算法。实现一个通用的 worklist 求解器&#xff0c;并用它来解决一些数据…

超便捷备忘录共享方法 文字文件都可共享

在这个信息爆炸的时代&#xff0c;备忘录已成为我们生活中不可或缺的小助手。它记录着我们的工作计划、待办事项、灵感闪现&#xff0c;甚至是那些温馨的家庭琐事。然而&#xff0c;当我们在不同的设备间穿梭&#xff0c;如何在手机、电脑&#xff0c;甚至是不同品牌的手机之间…