自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zd454909951的博客

正在fighting的一枚小小白

  • 博客(80)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 基于LLVM编译器的安全防护技术方案

程序设计语言的抽象有模块、函数、堆栈、类型和作用域等。LibFuzzer模糊测试引擎,和要被测试的库链接在一起,通过一个特殊的模糊测试进入点即目标函数,用测试用例feed要被测试的库,fuzzer会跟踪哪些代码区域已经被测试过,然后在输入数据的语料库上产生变异,代码覆盖的信息由LLVM的SanitizerCoverage插桩提供。安全编译研究对软件执行转换的编译方案,这些转换所产生的表示与源码具有相同的安全级别,旨在编译后保留高级编程语言抽象的安全性,可在源代码的抽象级别上推断应用程序的安全性。

2022-09-22 18:05:43 2129 1

原创 git基础

Git checkout -b 本地分支名 origin/远程分支名 创建分支并切换到此分支(采用此方法建立的本地分支会和远程分支建立映射关系)误删:git checkout --filename 实质用版本库里的版本替换工作区的版本,但只能恢复到最新版本,最近一次提交后修改的内容会丢失。HEAD指向当前版本,git允许在版本之间穿搜,git reset --hard commit_id返回到指定版本。将远程仓库与一个已有的本地仓库关联,然后将本地仓库的内容推送到远程仓库中。

2022-09-22 18:04:50 200

原创 4.编码风格与gdb

2、if/else、while、do/while、for、switch这些可以带语句块的语句,语句块的{和}应该和关键字写在一起,用空格隔开。就是指访问的内存超出了系统所给这个程序的内存空间,如果某个函数的局部变量发生访问越界,有可能并不立即产生段错误,而是在函数返回时产生段错误。4、switch和语句块里的case、default对齐写,也就是说语句块里的case、default相对于switch不往里缩进。2、双目运算符的两侧插入一个空格分隔 I = i + 1,单目运算符和操作数之间不加空格。

2022-09-14 11:36:47 303

转载 7安全运营

转载【CISSP备考笔记】第7章:安全运营 - Bypass - 博客园7.1 运营部门的角色​ prudent man、due care(按要求执行)VS due diligence(承担管理者责任)​ 应尽关注:执行了负责任的动作降低了风险。​ 应尽职责:采取了所有必要的安全步骤以了解公司或个人的实际风险。​ 运营安全是保持环境运行在一个必要的安全级别中的持续维护行为。运营安全涉及配置、性能、容错、安全性以及问责和验证管理,其目的在于确保适当的操作标准与合规性要求得到满足。

2022-03-01 11:30:59 713

原创 5身份与访问管理

控制访问信息资源如何被利用,来防止资源未授权修改或泄露。实现方法:技术性(逻辑性)、物理性、行政性访问控制需要采用分层纵深防御的方式5.1 访问控制概述访问控制是一种手段,控制用户和系统如何与其他系统和资源进行通信和交互。主体可以是通过访问客体以完成某种任务的用户、程序或进程。客体是包含被访问信息或者所需功能的被动实体,客体可以是计算机、数据库、文件、计算机程序、目录或数据库中某个表包含的字段。访问控制是防范计算机系统和资源被未授权访问的第一道防线。5.2 安全原

2022-02-24 19:26:01 1421

原创 6安全评估与测试

定期进行6.1 审计策略审计,对信息系统内部安全控制的系统性评估信息系统的安全审计时对特定范围的人、计算机、过程和信息的各种安全控制所实施的一个系统性评估监管或合规要求,信息系统架构的重大变化,或者是组织面临威胁的新发展等方面都会驱动审计的发生审计的范围应与业务经理协调后确定信息系统的安全审计流程:确定目标、让合适的业务部门领导参与、确定范围、选择审计团队、计划审计、执行审计、记录结果、将结果传达给合适的领导任何审计的最终期望状态:审计结果有效地传达给目标受众内部

2022-02-21 14:46:34 1241

原创 4通信和网络安全

通信是数据在系统之间的电子传输,采用模拟、数字或无线传输类型。数据沿着铜线、同轴电缆、光纤、空气、电话公司的公共交换电话网PSTN或服务供应商的光缆、交换机和路由器流动国际通信协会ITU国际标准化组织ISO4.2 开放系统互联参考模型网络协议是决定系统如何在网络中通信的规则标准集计算机通信方式 物理通道(电信号通过线缆从一台计算机传递到另一台计算机);逻辑通道(封装)对每层内的功能进行模块化的好处在于:不同的技术、协议和服务能够相互交互,并且提供支持.

2022-02-16 15:07:11 7570 1

原创 3安全工程

3.1 系统架构系统架构:描述了系统的主要组件,以及系统组件之间、系统与用户之间以及系统与其他系统之间如何相互交互安全架构设计原则ISO/IEC 19249,描述的五个框架原则:域隔离、分层、封装、冗余、虚拟化五个设计原则:最小特权、攻击面最小化、集中参数验证、集中通用安全服务、为错误和异常处理做准备术语开发是指系统的整个生命周期,包括规划、分析、设计、构建、测试、部署、维护和退役八个阶段3.2 计算机架构中央处理单元CPU程序计数器寄存器保存需要提取的下

2022-02-14 11:47:35 1526

原创 2资产安全

2.1 信息生命周期(1)获取(2)使用须确保内部一致性(3)存档需保留多长时间(4)处置数据真正被销毁及其被正确销毁2.2 数据分类商业公司的信息敏感级别:机密confidential、隐私、敏感、公开军事机构的信息敏感级别:绝密、秘密secret、机密、敏感但未分类、未分类术语未分类、秘密和绝密通常与政府组织相关联,术语隐私、专有权、敏感通常与非政府组织相关联2.3 责任分层高级管理层持续对组织负有最终责任首席隐私官:负责确保客户、

2022-02-10 15:10:49 3600

原创 1安全与风险管理

安全和风险1.1 安全基本原则核心目标是为关键资产提供可用性、完整性和机密性(1)可用性:确保授权用户能够对数据和资源进行及时和可靠的访问独立磁盘冗余阵列RAID、群集、负载平衡、冗余数据的电源线、软件和数据备份、磁盘映像、异地备用设施、回滚功能、故障切换配置(2)完整性:保证信息和系统的准确性和可靠性,并禁止对数据的非授权更改。散列(数据完整性)、配置管理(系统完整性)、变更控制(进程完整性)、访问控制、软件数字签名、循环冗余校验码CRC(3)机密性:确保在数据处理

2022-02-09 10:23:30 1582

原创 python处理数据

1、安装python下载Download Python | Python.org 正常安装,勾选Add Python 3.9 to PATH2、安装openpyxl库点击windows键+R键,弹出cmd框。cmd框中输入pip installopenpyxl,回车。安装成功,则弹出消息Finished processing dependencies foropenpyxl==openpyxl的版本号。若提示pip需要升级则输入python -m install pip --upg...

2021-09-16 11:44:05 1655

原创 122. 买卖股票的最佳时机 II

给定一个数组 prices ,其中prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。方法:贪心算法假设每天都有交易,今天买明天卖,若两天的股票价格差大于0,则说明有利润;若小于等于0,则没有利润,将所有大于0的差值进行累加即为最大利润。class Solution {public: int maxProfit(vec.

2021-08-23 16:52:01 75

原创 27.移除元素

给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。方法:快慢指针快指针寻找不等于val的元素,将其存储在慢指针指向的下标处。class Solution {public: int removeElement(vector<int>& nums, int ...

2021-08-19 16:05:42 69

原创 26. 删除有序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。方法:双指针设置两个标记fast,slow,fast用来寻找下一个不重复

2021-08-17 19:39:05 79

原创 125.验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串方法:双指针法在原有字符串上直接判断,设置i,j分别指向字符串的首尾字符,首先判断是否为字符或数字,若不是则后移或前进,直到两个都为字符或数字再判断是否相等。class Solution {p

2021-08-16 11:29:16 73

原创 234.回文链表(C++)

请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false方法:将链表中的数字存入字符串中,判断字符串是否为回文/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(..

2021-08-16 10:29:00 458

原创 9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。class Solution {public: bool isPalindrome(int x) .

2021-08-11 17:34:20 67

原创 8. 字符串转换整数 (atoi)

请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,"123"...

2021-08-11 10:31:50 109

原创 7.整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−2^31,2^31− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321思路:本题主要考虑两个点,第一从x中拿到每一位,比较简单,取模除十循环即可;第二拿到数字后如何存储,并且要判断是否有溢出。假设拿到的数字是num,存储的结果是ans,那ans=ans*10+num,问题即判断ans溢出问...

2021-08-05 17:52:45 124

原创 6.字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "PAYPALISHIRING"行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int...

2021-08-03 19:55:05 280

原创 3.无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。方法:暴力遍历创建向量存储无重复的字符。处理第一个字符开头的字符串abcabcbb,逐字符遍历,判断向量中是否有该元素,若无则存入,若有说明有重复字符,记录子串长度。清空向量,同样处理以第二个字符开头的字符串bcabcbb,依次处理第三个字符开头的字符串cabcbb,最后返回最大的子串长度即可...

2021-08-02 17:25:44 122

原创 989.数组形式的整数加法

对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数 X 的数组形式A,返回整数X+K的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234方法:逐位相加,逢十进一...

2021-07-31 10:14:17 141

原创 415.字符串相加

给定两个字符串形式的非负整数num1和num2,计算它们的和。方法:逐位相加,逢十进一,与67二进制求和是一类题class Solution {public: string addStrings(string num1, string num2) { reverse(num1.begin(), num1.end()); reverse(num2.begin(), num2.end()); int len1 = num1.length(...

2021-07-30 17:27:45 63

原创 67.二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"方法:逐位相加,逢二进一class Solution {public: string addBinary(string a, string b) { reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); ...

2021-07-30 17:13:05 275

原创 2. 两数相加(C++)

给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.方法:链表相加思路:链表逆序存储数字,则链表头部节点开始分别代表个十百千位,两个链表对应节点相加即为和的相应位,注意考虑进位...

2021-07-29 17:01:34 1440

原创 653. 两数之和 IV - 输入 BST

给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。示例 1:输入: root = [5,3,6,2,4,null,7], k = 9输出: true方法:中序遍历+双指针二叉搜索树BST(Binary Search Tree)的特点是左子树节点值永远小于根节点,右子树节点值永远大于根节点,中序遍历(左子树—>根节点—>右子树)二叉搜索树的结果是有序的。解题思路即为中序遍历二叉树存放在数组中,再使.

2021-07-29 15:40:27 107

原创 167.两数之和 II - 输入有序数组

给定一个已按照 升序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例 1:输入:numbers = [2,7,11,15], tar...

2021-07-28 15:11:33 90

原创 1.两数之和(C++)

给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。方法一:暴力法class Solution {pub...

2021-07-27 16:05:17 2538

原创 Pass框架

/include/llvm/Pass.hPass框架是LLVM系统中一个重要的部分,Pass类是实现代码优化的主要资源,每个pass是LLVM系统进行转化和优化工作的一个节点,可以完成特定的优化工作,多个pass可共同完成优化和转化。Pass分类从代码结构上来说,LLVM 编译器给开发者们提供了一个Pass类和其子类,主要的子类有ModulePass、FunctionPass、BasicBlockPass等,声明在llvm/Pass.h文件中。根据所需功能,研究者们可以通过重写继承.

2020-08-10 16:15:07 1344

原创 Windows7使用VS2017编译LLVM+Clang源码

Windows7使用VS2017编译LLVM+Clang源码工具:VS2017、Python(用于运行测试套件)、CMake-3.15.1(用于生成VS解决方案和项目文件)Tips:1、VS确认好安装版本,切记不要混装 (由于VS2015和VS2017的混装导致CMake生成LLVM.sln折腾了一天) 2、CMake安装最新版,以支持VS2017源码包:llvm-8.0.1.src.tar.xzcfe-8.0.1.src.tar.xz(Clang)co...

2020-08-10 11:56:18 1590

原创 llvm编译器概述

基于LLVM的编译器三段式设计:(1)前端Clang:负责对输入代码进行解析,对输入代码中的错误进行验证和诊断,然后将解析的代码转换成LLVM IR(源代码—AST—LLVM IR),包括词法分析器、语法分析器、语义分析器、LLVM IR代码生成器。(2)优化器:对LLVM IR有选择性进行多遍分析和优化,生成执行速度更快的LLVM IR。具有两种文件表示形式,便于人工理解的.ll文件和二进制编码形式的.bc文件。(3)后端:将LLVM IR转换成与目标架构相关的汇编代码优点:(1)

2020-08-10 11:50:29 822

原创 程序编译概述

计算机语言演变:机器语言——>汇编语言——>高级语言(机器语言或汇编语言的程序依赖于特定的机器)机器指令0/1序列(目标程序)——>汇编指令——>源代码由源程序到可运行程序的生成过程:源代码文件——>汇编文件——>目标文件——>可执行程序 编译器 汇编器 链接器hello.c——>hello.i——>hello.s——>hello.o——>...

2020-08-10 11:33:52 366

原创 链接

链接的过程是由一个链接脚本(Linker Script)控制的,链接脚本决定了给每个段分配什么地址,如何对齐,哪个段在前,哪个段在后,哪些段合并到同一个Segment,另外链接脚本还要插入一些符号到最终生成的文件中,例如__bss_start、_edata、_end等。编译器在处理函数调用代码时需要有函数类型,因为必须知道参数的类型和个数以及返回值的类型才知道生成什么指令。隐式声明靠不住,那编译器为什么不自己去找函数定义,而非要让我们在调用之前写函数原型呢?因为编译器往往不知道去哪里找函数定义.

2020-07-07 11:43:45 862

原创 汇编与C的关系

汇编程序.section指示把代码划分成若干个段(Section),程序被操作系统加载执行时,每个段被加载到不同的地址,具有不同的读、写、执行权限。.data保存程序数据,可读可写 全局变量属于.data.text保存代码,只读和可执行.plt段协助完成动态链接的过程内存寻址:直接寻址、变址寻址、间接、基址寻址、立即数寻址、寄存器寻址程序中的地址都是虚拟地址ELF文件:UNIX系统的可执行文件都采用ELF格式,有三种类型:可重定位的目标文件Relocatab...

2020-07-06 16:18:26 386

转载 Linux内核启动过程

终于找到一篇文章明白了内核启动过程,记录分享一下,若有侵权则删。原文链接:http://www.0511zz.com/html/sheji/jc/2018/0815/149280.html嵌入式linux内核的启动全过程主要分为三个阶段。第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式、使能MMU、设置一级页表等,而第三阶段则主要为C代码,包括内核初始化的全部工作,下面是详细介绍。  一、Linux内核自解压过程  在linux内核启动过程中一般能看到图1内核自解压界面,

2020-06-29 11:09:38 2732

原创 计算机体系结构基础

现代计算机都是基于Von Neumann体系结构的,不管是嵌入式系统、PC还是服务器。这种体系结构的主要特点是:CPU(CPU,Central Processing Unit,中央处理器,或简称处理器Processor)和内存(Memory)是计算机的两个主要组成部分,内存中保存着数据和指令,CPU从内存中取指令(Fetch)执行,其中有些指令让CPU做运算,有些指令让CPU读写内存中的数据。冯诺依曼五大结构:输入、输出、存储器、控制器、运算器CPU包含:寄存器、程序计数器PC、指令解码器、算.

2020-06-22 11:26:36 676

原创 运算符

MSB Most Significant Bit 最左边称为最高位LSB Least Significant Bit 最右边为最低位 第0位负数表示:最高位当做符号位,0表示正 1表示负,剩余表示绝对值大小整数类型:char (不带signed或unsigned由编译器确定是有符号还是无符号数) short、int、long、long long int (不明确写signed或unsigned都表示有符号数) 枚举(常量...

2020-06-22 11:25:44 616

原创 3.C数据类型

学习一门编程语言时,要注意:1. 这门语言提供了哪些Primitive,比如基本数据类型,比如基本的运算符、表达式和语句。2. 这门语言提供了哪些组合规则,比如复合数据类型,比如表达式和语句的组合规则。3. 这门语言提供了哪些抽象机制,例如数据抽象和过程抽象(Procedure Abstraction)。最简单的过程抽象:把一组语句用函数名封装起来复合数据类型—...

2020-05-07 17:19:37 248

原创 2.函数和语句

函数提供了一个接口(Interface),调用函数就是使用这个接口返回值类型 函数名(参数列表){ 语句列表}执行程序时,系统调用main函数,main函数返回值返回给操作系统,执行成功返回0,执行出错返回非零值。int main(int argc, char *argv[])int main(void)函数返回一个值相当于定义一个和函数返回值类型相同的临时...

2020-04-21 09:39:05 930

原创 1.C语言基本概念辨析

写在前面的话:由于要学编译器,看文档总觉得编程的一些基本概念没有搞清楚导致理解编译器的树型定义有些吃力,所以找来《Linux C一站式编程》这本书来看,发现这本书真的讲得简单明了,自认为很适合初学者,有一定基础的再读也会收获很多。机器语言——汇编语言——高级语言程序由指令组成,基本指令包括:输入、输出、基本运算、测试和分支、循环编译和解释的不同:编译是全翻译完再执行,解释是翻译一句执行...

2020-04-17 15:17:08 371

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除