安全开发--多语言基础知识
注释:还是要特别说明一下,想成为专业开发者不要看本文,本文是自己从业安全以来的一些经验总结,所有知识点也只限于网络安全这点事儿,再多搞不明白了。
开发语言
笼统的按照是否编译成机器码分类开发语言,开发语言分为脚本语言和编译语言;脚本语言包括: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…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
