当前位置: 首页 > news >正文

安全开发--多语言基础知识

注释:还是要特别说明一下,想成为专业开发者不要看本文,本文是自己从业安全以来的一些经验总结,所有知识点也只限于网络安全这点事儿,再多搞不明白了。

开发语言

笼统的按照是否编译成机器码分类开发语言,开发语言分为脚本语言和编译语言;脚本语言包括: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定义或有不同,如下表格不代表同类型转换

语言类型pythonphpjavac#cgolang
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支持intlong(在Python 2中,但在Python 3中long已被合并到int中)。

示例代码:

int1 = 10    # 正整数
int2 = -20   # 负整数
int3 = 0     # 零

Java

Java中的整数需要指定类型,如intlongshortbyte等。对于int类型,可以省略Ll后缀。

示例代码:

int int1 = 10;   // 正整数
int int2 = -20;  // 负整数
int int3 = 0;    // 零long longValue = 9223372036854775807L; // 长整型示例,需要L后缀

C

C语言中的整数同样需要指定类型,如intlongshortchar等。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也支持int8int16int32int64等。

示例代码:

package mainimport "fmt"func main() {int1 := 10    // 正整数int2 := -20   // 负整数int3 := 0     // 零var int4 int8 = -128 // 8位整数,有符号fmt.Println(int1, int2, int3, int4)
}

总结

不同编程语言的整数创建方式各有特点:

  • PHPPython 在整数创建上非常简洁,直接使用数字即可。
  • Java 需要显式指定整数的类型,并且对于长整型需要使用Ll后缀。
  • 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)这几种语言中条件控制语句的用法,并提供示例代码。

条件控制语句概述

条件控制语句主要包括ifelseelse 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语言的现代性和简洁性。

了解每种语言的函数特性有助于开发者更好地利用每种语言的优势,编写出更加高效和可维护的代码。函数是代码复用和模块化的基础,掌握其在不同语言中的使用对于成为一名多语言开发者至关重要。

相关文章:

安全开发--多语言基础知识

注释&#xff1a;还是要特别说明一下&#xff0c;想成为专业开发者不要看本文&#xff0c;本文是自己从业安全以来的一些经验总结&#xff0c;所有知识点也只限于网络安全这点事儿&#xff0c;再多搞不明白了。 开发语言 笼统的按照是否编译成机器码分类开发语言&#xff0c;…...

如何使一个盒子水平垂直居中(常用的)

目录 1. 使用Flex布局 2. 使用Grid布局 3.绝对定位 负外边距 (必须知晓盒子的具体大小) 4.绝对定位外边距 auto 5.绝对定位 transform (无须知晓盒子的具体大小) 1. 使用Flex布局 如何实现&#xff1a; 在父元素上添加&#xff1a; display: flex; align-items: center…...

安全防御-用户认证综合实验

一、拓扑图 二、实验要求 1、DMZ区的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9:00-18:00&#xff09;可以访问&#xff0c;生产区设备全天都是可以访问的 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 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用法和实现

一&#xff1a;功能 按字典顺序比较两个序列&#xff0c;判断第一个序列是否小于(或大于)第二个序列 二&#xff1a;用法 #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 基础复习笔记 - 框架、装饰、弹性盒子

自己复习前端基础&#xff0c;仅用于记忆&#xff0c;初学者不太适合 示例代码 - HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…...

C++:创建线程

在C中创建线程&#xff0c;最直接的方式是使用C11标准引入的<thread>库。这个库提供了std::thread类&#xff0c;使得线程的创建和管理变得简单直接。 以下是一个简单的示例&#xff0c;展示了如何在C中使用std::thread来创建和启动线程&#xff1a; 示例1&#xff1a;…...

python如何查看类的函数

Python非常方便&#xff0c;它不需要用户查询文档&#xff0c;只需掌握如下两个帮助函数&#xff0c;即可查看Python中的所有函数&#xff08;方法&#xff09;以及它们的用法和功能&#xff1a; dir()&#xff1a;列出指定类或模块包含的全部内容&#xff08;包括函数、方法、…...

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组件冲突&#xff1a;[/components/uni-icons/uni-icons.vue,/uni_modules/uni-icons/components/uni-icons/uni-icons.vue]​ 问题描述 老项目&#xff0c;在uniapp插件商城导入了一个新的uniapp官方开发的组件》uni-data-picker 数据驱动的picker选择器 …...

总结24个Python接单赚钱平台与详细教程,兼职月入5000+

如果说当下什么编程语言最靠谱或者比较适合搞副业&#xff1f; 答案肯定100%是&#xff1a;Python。 python是所有语法中最简单易上手的语言&#xff0c;不需要特别的的英语词汇量&#xff0c;逻辑思维也不需要很差就能上手。而且学会了之后就能编写代码爬取各种数据&#xf…...

macOS 的电源适配器设置

在 macOS 的电源适配器设置中&#xff0c;有四个选项&#xff0c;每个选项都有特定的功能&#xff1a; Prevent your Mac from automatically sleeping when the display is off&#xff08;当显示屏关闭时&#xff0c;防止你的 Mac 自动进入睡眠状态&#xff09;&#xff1a;…...

视觉SLAM与定位之一前端特征点及匹配

视觉SLAM中的特征点及匹配 参考文章或链接特征点性能的评估传统特征点和描述子&#xff08;仅特征点或者特征点描述子&#xff09;传统描述子 基于深度学习的特征点基于深度学习的描述子基于深度学习的特征点描述子特征匹配 参考文章或链接 Image Matching from Handcrafted t…...

开源项目的认识理解

目录 开源项目有哪些机遇与挑战&#xff1f; 1.开源项目的发展趋势 2.开源的经验分享&#xff08;向大佬请教与上网查询&#xff09; 3.开源项目的挑战 开源项目有哪些机遇与挑战&#xff1f; 1.开源项目的发展趋势 1. 持续增长与普及 - 开源项目将继续增长&#xff0c…...

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安装方法&#xff08;以双语对照插件为例&#xff09;1、WebUI内置的下载方式&#xff08;推荐&#xff09;2、git clone安装&#xff08;更推荐&#xff09;3、github下载安装包后解压&#xff08;不推荐&#xff09; 强力推荐安装的几个插…...

HTML5表单的自动验证、取消验证、自定义错误信息

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

SpringMVC系列九: 数据格式化与验证及国际化

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

判断链表中是否有环(力扣141.环形链表)

这道题要用到快慢指针。 先解释一下什么是快慢指针。 快慢指针有两个指针&#xff0c;走得慢的是慢指针&#xff0c;走得快的是快指针。 在这道题&#xff0c;我们规定慢指针一次走一步&#xff0c;快指针一次走2步。 如果该链表有环&#xff0c;快慢指针最终会在环中相遇&a…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...