安全开发--多语言基础知识
注释:还是要特别说明一下,想成为专业开发者不要看本文,本文是自己从业安全以来的一些经验总结,所有知识点也只限于网络安全这点事儿,再多搞不明白了。
开发语言
笼统的按照是否编译成机器码分类开发语言,开发语言分为脚本语言和编译语言;脚本语言包括:python,php,语言特点是更加接近自然语言,运行需要特定的解释器,与底层系统一般无关,因此脚本语言一般也是毫无秘密可言,脚本语言的这一特性也决定很多人将他们作为开源项目语言使用。脚本语言一般都是弱类型语言,解释器会根据实际运行情况进行类型推导,这导致我们可以使用脚本语言很快的写出代码,但是经常会在运行一段时间后产生各种各样的BUG。
编译语言分为:c,golang。编译语言是可以直接编译成对应CPU机器码独立运行,因此编译语言是不可跨CPU架构移植的,编译语言去符号编译代码一般不可逆,其中IDA可以逆向出伪代码,带符号编译则可以在debug模式下看到源码。编译语言一般都是强类型语言,保证能编译就能使用,但是这话也不绝对,有的编译语言为了像脚本语言一样也有很好的编码体验,对用户也是采用弱类型。常规的编译语言都是强类型,好处就是代码编译后bug较少。
其中java,c#并不属于两者,粗俗的理解,它们是虚拟机语言,他们具备脚本语言的一些特点,比如可以逆向源码,也具备一些编译语言的特点,比如是强类型,有复杂的语法要求。当然虚拟机语言出现bug,调试也普遍比脚本语言与编译语言难。
数据类型
不同语言对于数据类型的概念都是一样的,一个完整的开发语言一般包括整数(也有一些特别的语言没有这么多类型)、浮点数、字符串、布尔值、组合类型(不同语言会有一些不同的衍生)下面对比列一下6种语言的整数类型
整型
计算机由于使用二进制,所以有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,二进制用 0b表示例如 0b1000。八进制用o表示,例如0o123 等等。这里的整数概念包含各个进制的整数,当然常见的是10进制。
其中脚本语言大多数可以处理任意大小的整数(不代表数据库也处理任意大小),编译语言则只能处理固定长度(编者知识广度有限,不绝对),因此在安全上有一项渗透测试叫做整数溢出测试。原理就是利用某些语言只能处理有限长度的整数类型,超过它最大值后取反补位操作变成特别小或者复数的值。最典型的就是C语言整数溢出漏洞,这种漏洞的原理及利用会在后面章节描述。
注释:各语言的int lang short定义或有不同,如下表格不代表同类型转换
语言类型 | python | php | java | c# | c | golang |
---|---|---|---|---|---|---|
uint8 | ✔ | |||||
uint16 | ✔ | |||||
uint32 | ✔ | |||||
uint64 | ✔ | |||||
int | ✔ | ✔ | ✔ | ✔ | ✔ | |
lang | ✔ | ✔ | ✔ | |||
short | ✔ | ✔ | ✔ | |||
int8 | ✔ | |||||
int8 | ✔ |
整数创建在不同编程语言中的比较
整数是编程中最基本的数据类型之一,用于表示没有小数部分的数值。不同的编程语言在创建和表示整数时有着不同的语法和特性。本文将介绍PHP、Python、Java、C和Go(Golang)这几种语言中创建整数的不同方式,并提供示例代码。
整数概述
整数可以是正数、负数或零。在某些语言中,整数可以有不同的大小,例如8位、16位、32位或64位整数。
PHP
PHP中的整数使用数字直接表示,不需要任何特殊的语法。
示例代码:
<?php
$int1 = 10; // 正整数
$int2 = -20; // 负整数
$int3 = 0; // 零
?>
Python
Python中的整数同样直接使用数字表示。Python 3支持int
和long
(在Python 2中,但在Python 3中long
已被合并到int
中)。
示例代码:
int1 = 10 # 正整数
int2 = -20 # 负整数
int3 = 0 # 零
Java
Java中的整数需要指定类型,如int
、long
、short
、byte
等。对于int
类型,可以省略L
或l
后缀。
示例代码:
int int1 = 10; // 正整数
int int2 = -20; // 负整数
int int3 = 0; // 零long longValue = 9223372036854775807L; // 长整型示例,需要L后缀
C
C语言中的整数同样需要指定类型,如int
、long
、short
、char
等。C语言还支持无符号整数,使用unsigned
关键字。
示例代码:
#include <stdio.h>int main() {int int1 = 10; // 正整数int int2 = -20; // 负整数int int3 = 0; // 零unsigned int uint1 = 65535; // 无符号整数return 0;
}
Go (Golang)
Go中的整数使用int
类型表示,Go语言的整数类型长度依赖于运行时的架构(32位或64位)。Go也支持int8
、int16
、int32
、int64
等。
示例代码:
package mainimport "fmt"func main() {int1 := 10 // 正整数int2 := -20 // 负整数int3 := 0 // 零var int4 int8 = -128 // 8位整数,有符号fmt.Println(int1, int2, int3, int4)
}
总结
不同编程语言的整数创建方式各有特点:
- PHP 和 Python 在整数创建上非常简洁,直接使用数字即可。
- Java 需要显式指定整数的类型,并且对于长整型需要使用
L
或l
后缀。 - C 语言需要指定整数的类型,并且支持无符号整数。
- Go 的整数类型长度依赖于运行时架构,并且Go提供了不同位数的整数类型。
了解每种语言的整数创建方式有助于开发者在不同语言之间进行切换时快速适应其数值类型的使用。整数是编程中非常基础和常用的数据类型,掌握其在不同语言中的使用对于编写高效和可维护的代码至关重要。
字符串创建在不同编程语言中的比较
字符串是编程中表示文本数据的基本数据结构。不同的编程语言提供了不同的方法来创建和操作字符串。本文将探讨PHP、Python、Java、C和Go(Golang)这几种语言中创建字符串的不同方式,并提供示例代码。
字符串概述
字符串是由字符组成的序列,可以是定长的也可以是不定长的。不同的编程语言对字符串的表示和操作有着不同的语法。
PHP
PHP中的字符串可以使用双引号、单引号或heredoc语法创建。
示例代码:
<?php
$string1 = "This is a string in double quotes";
$string2 = 'This is a string in single quotes';
$string3 = <<<EOT
This is a string using heredoc syntax.
EOT;
?>
Python
Python中的字符串同样可以使用双引号或单引号创建。Python 3支持原始字符串(raw string)。
示例代码:
string1 = "This is a string in double quotes"
string2 = 'This is a string in single quotes'
string3 = r"This is a raw string with \n and \t"
Java
Java中的字符串使用双引号创建,并且Java的字符串是不可变的。
示例代码:
String string1 = "This is a string in Java";
String string2 = new String("This is another way to create a string");
C
C语言中的字符串是以null字符(\0
)结尾的字符数组。
示例代码:
#include <stdio.h>int main() {char string1[] = "This is a string in C";char string2[] = {'T', 'h', 'i', 's', ' ', 'i', 's', '\0'};printf("%s\n", string1);return 0;
}
Go (Golang)
Go中的字符串使用双引号创建,Go的字符串同样是不可变的。
示例代码:
package mainimport "fmt"func main() {string1 := "This is a string in Go"fmt.Println(string1)
}
总结
不同编程语言的字符串创建方式各有特点:
- PHP 支持多种创建字符串的语法,包括双引号、单引号和heredoc。
- Python 支持双引号和单引号,以及原始字符串,避免转义字符的需要。
- Java 使用双引号创建字符串,并且Java的字符串是不可变的,这意味着每次对字符串的操作都会产生新的字符串对象。
- C 语言中的字符串是字符数组,以null字符结尾,需要手动管理内存。
- Go 使用双引号创建字符串,Go的字符串同样是不可变的,并且Go提供了丰富的字符串操作函数。
了解每种语言的字符串创建方式有助于开发者在不同语言之间进行切换时快速适应其字符串操作的写法。字符串是编程中非常基础和常用的数据类型,掌握其在不同语言中的使用对于编写高效和可维护的代码至关重要。
条件控制语句在不同编程语言中的比较
条件控制语句是编程中用于基于特定条件执行不同代码路径的基本结构。不同的编程语言有着不同的语法和特性,但它们的核心概念是相似的。本文将介绍PHP、Python、Java、C和Go(Golang)这几种语言中条件控制语句的用法,并提供示例代码。
条件控制语句概述
条件控制语句主要包括if
、else
、else if
(或elif
)等关键字,用于根据不同的条件执行不同的代码块。
PHP
PHP的条件控制语句与其他C风格的语言相似。
示例代码:
<?php
$score = 75;
if ($score >= 90) {echo "优秀";
} elseif ($score >= 70) {echo "良好";
} else {echo "及格";
}
?>
Python
Python使用缩进来定义代码块,而不是使用大括号。elif
是Python特有的关键字,等同于其他语言中的else if
。
示例代码:
score = 75
if score >= 90:print("优秀")
elif score >= 70:print("良好")
else:print("及格")
Java
Java的条件控制语句结构与PHP类似,但是Java使用大括号{}
来定义代码块。
示例代码:
int score = 75;
if (score >= 90) {System.out.println("优秀");
} else if (score >= 70) {System.out.println("良好");
} else {System.out.println("及格");
}
C
C语言的条件控制语句与Java类似,使用大括号定义代码块,但是没有elif
关键字,通常使用else if
。
示例代码:
#include <stdio.h>int main() {int score = 75;if (score >= 90) {printf("优秀\n");} else if (score >= 70) {printf("良好\n");} else {printf("及格\n");}return 0;
}
Go (Golang)
Go语言的条件控制语句与C类似,但Go没有else if
,通常使用多个if
语句来实现相同的功能。
示例代码:
package mainimport "fmt"func main() {score := 75if score >= 90 {fmt.Println("优秀")} else if score >= 70 {fmt.Println("良好")} else {fmt.Println("及格")}
}
总结
尽管不同编程语言的条件控制语句在语法上有所差异,但它们的逻辑结构是相似的。PHP、Java和C使用大括号来定义代码块,而Python使用缩进。Go语言在if
语句中可以省略else if
,直接使用多个if
语句。了解这些差异有助于开发者在不同语言之间进行切换时快速适应其条件控制语句的写法。
函数在不同编程语言中的比较
函数是编程中封装代码块的基本单位,用于执行特定的任务。不同的编程语言在函数的定义和调用上有着不同的语法和特性。本文将介绍PHP、Python、Java、C和Go(Golang)这几种语言中函数的用法,并提供示例代码。
函数概述
函数通常包含函数名、参数列表、返回类型和函数体。函数可以返回一个值,也可以不返回任何值(即返回void或无返回值)。
PHP
PHP的函数使用function
关键字定义,并且可以定义返回类型和参数类型。
示例代码:
<?php
function add($a, $b) {return $a + $b;
}echo add(5, 3); // 输出 8
?>
Python
Python中的函数使用def
关键字定义,不需要指定返回类型。Python 3支持类型注解,但这是可选的。
示例代码:
def add(a, b):return a + bprint(add(5, 3)) # 输出 8
Java
Java的函数定义在类中,使用public static
关键字定义静态方法。Java 8及以后版本支持lambda表达式。
示例代码:
public class Main {public static int add(int a, int b) {return a + b;}public static void main(String[] args) {System.out.println(add(5, 3)); // 输出 8}
}
C
C语言中的函数定义使用返回类型和函数名。C语言不支持参数类型注解或返回类型注解。
示例代码:
#include <stdio.h>int add(int a, int b) {return a + b;
}int main() {printf("%d\n", add(5, 3)); // 输出 8return 0;
}
Go (Golang)
Go的函数使用func
关键字定义,并且支持匿名函数和闭包。Go的函数可以有多个返回值。
示例代码:
package mainimport "fmt"func add(a, b int) int {return a + b
}func main() {fmt.Println(add(5, 3)) // 输出 8
}
总结
不同编程语言的函数定义和调用方式各有特点:
- PHP 函数可以灵活定义,支持返回类型和参数类型注解。
- Python 使用简洁的
def
关键字定义函数,支持类型注解,但类型注解是可选的。 - Java 函数定义在类中,支持静态方法,并且从Java 8开始支持lambda表达式。
- C 语言的函数定义较为传统,不支持参数或返回值的类型注解。
- Go 语言的函数定义简洁,支持匿名函数和多返回值,体现了Go语言的现代性和简洁性。
了解每种语言的函数特性有助于开发者更好地利用每种语言的优势,编写出更加高效和可维护的代码。函数是代码复用和模块化的基础,掌握其在不同语言中的使用对于成为一名多语言开发者至关重要。
相关文章:
安全开发--多语言基础知识
注释:还是要特别说明一下,想成为专业开发者不要看本文,本文是自己从业安全以来的一些经验总结,所有知识点也只限于网络安全这点事儿,再多搞不明白了。 开发语言 笼统的按照是否编译成机器码分类开发语言,…...
如何使一个盒子水平垂直居中(常用的)
目录 1. 使用Flex布局 2. 使用Grid布局 3.绝对定位 负外边距 (必须知晓盒子的具体大小) 4.绝对定位外边距 auto 5.绝对定位 transform (无须知晓盒子的具体大小) 1. 使用Flex布局 如何实现: 在父元素上添加: display: flex; align-items: center…...

安全防御-用户认证综合实验
一、拓扑图 二、实验要求 1、DMZ区的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区设备全天都是可以访问的 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 3、办公区设备10.0.2.20不允许访…...
uniapp安卓离线打包配置scheme url
uniapp安卓离线打包配置scheme url 打开 AndroidManifest.xml 搜索 scheme 填入 即可 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"uni.UNI979A394…...
C++ STL std::lexicographical_compare用法和实现
一:功能 按字典顺序比较两个序列,判断第一个序列是否小于(或大于)第二个序列 二:用法 #include <compare> #include <vector> #include <string> #include <algorithm> #include <iostream> #include <fo…...
ORM Bee,如何使用Oracle的TO_DATE函数?
ORM Bee,如何使用Oracle的TO_DATE函数? 在Bee V2.4.0,可以这样使用: LocaldatetimeTable selectBeannew LocaldatetimeTable();Condition conditionBF.getCondition();condition.op("localdatetime", Op.ge, new TO_DATE("2024-07-08", "YYYY-MM-DD&…...

HTML CSS 基础复习笔记 - 框架、装饰、弹性盒子
自己复习前端基础,仅用于记忆,初学者不太适合 示例代码 - HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…...
C++:创建线程
在C中创建线程,最直接的方式是使用C11标准引入的<thread>库。这个库提供了std::thread类,使得线程的创建和管理变得简单直接。 以下是一个简单的示例,展示了如何在C中使用std::thread来创建和启动线程: 示例1:…...

python如何查看类的函数
Python非常方便,它不需要用户查询文档,只需掌握如下两个帮助函数,即可查看Python中的所有函数(方法)以及它们的用法和功能: dir():列出指定类或模块包含的全部内容(包括函数、方法、…...
P6. 对局列表和排行榜功能
P6. 对局列表和排行榜功能 0 概述1 对局列表功能1.1 分页配置1.2 后端按页获取对局列表接口1.3 前端展示传回来的对局列表1.4 录像回放功能1.4.1 录像回放的流程1.4.2 录像回放的实现 1.5 前端分页展示 2 排行榜功能2.1 排行榜的实现 0 概述 本节主要介绍了如何实现对局列表和…...

uniapp easycom组件冲突
提示信息 easycom组件冲突:[/components/uni-icons/uni-icons.vue,/uni_modules/uni-icons/components/uni-icons/uni-icons.vue] 问题描述 老项目,在uniapp插件商城导入了一个新的uniapp官方开发的组件》uni-data-picker 数据驱动的picker选择器 …...

总结24个Python接单赚钱平台与详细教程,兼职月入5000+
如果说当下什么编程语言最靠谱或者比较适合搞副业? 答案肯定100%是:Python。 python是所有语法中最简单易上手的语言,不需要特别的的英语词汇量,逻辑思维也不需要很差就能上手。而且学会了之后就能编写代码爬取各种数据…...
macOS 的电源适配器设置
在 macOS 的电源适配器设置中,有四个选项,每个选项都有特定的功能: Prevent your Mac from automatically sleeping when the display is off(当显示屏关闭时,防止你的 Mac 自动进入睡眠状态):…...
视觉SLAM与定位之一前端特征点及匹配
视觉SLAM中的特征点及匹配 参考文章或链接特征点性能的评估传统特征点和描述子(仅特征点或者特征点描述子)传统描述子 基于深度学习的特征点基于深度学习的描述子基于深度学习的特征点描述子特征匹配 参考文章或链接 Image Matching from Handcrafted t…...

开源项目的认识理解
目录 开源项目有哪些机遇与挑战? 1.开源项目的发展趋势 2.开源的经验分享(向大佬请教与上网查询) 3.开源项目的挑战 开源项目有哪些机遇与挑战? 1.开源项目的发展趋势 1. 持续增长与普及 - 开源项目将继续增长,…...

37.哀家要长脑子了!--层序遍历
gongmi层序遍历模板 vector<vector<int>> levelOrder(TreeNode *root){queue<TreeNode*> que;vector<vector<int>> res;if(root ! nullptr)que.push(root);while(!que.empty()){int size que.size();vector<int> storey;for(int i 0; i …...

【从零开始AI绘画6】StableDiffusionWebUI拓展的安装方法以及推荐的几个拓展
这里写自定义目录标题 拓展Extention安装方法(以双语对照插件为例)1、WebUI内置的下载方式(推荐)2、git clone安装(更推荐)3、github下载安装包后解压(不推荐) 强力推荐安装的几个插…...

HTML5表单的自动验证、取消验证、自定义错误信息
1、自动验证 通过在元素中使用属性的方法,该属性可以实现在表单提交时执行自动验证的功能。下面是关于对元素内输入内容进行限制的属性的指定。 属性说明required输入内容是否不为空pattern输入的内容是否符合指定格式min、max输入的数值是否在min~max范围step判断…...

SpringMVC系列九: 数据格式化与验证及国际化
SpringMVC 数据格式化基本介绍基本数据类型和字符串自动转换应用实例-页面演示方式Postman完成测试 特殊数据类型和字符串自动转换应用实例-页面演示方式Postman完成测试 验证及国际化概述应用实例代码实现注意事项和使用细节 注解的结合使用先看一个问题解决问题 数据类型转换…...

判断链表中是否有环(力扣141.环形链表)
这道题要用到快慢指针。 先解释一下什么是快慢指针。 快慢指针有两个指针,走得慢的是慢指针,走得快的是快指针。 在这道题,我们规定慢指针一次走一步,快指针一次走2步。 如果该链表有环,快慢指针最终会在环中相遇&a…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...

SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
【导读】 本文针对无人机(UAV)视频中目标尺寸小、运动快导致的多目标跟踪难题,提出一种更简单高效的方法。核心创新在于从低置信度检测启动跟踪(贴合无人机场景特性),并改进传统外观匹配算法以关联此类检测…...