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

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

开发语言

笼统的按照是否编译成机器码分类开发语言,开发语言分为脚本语言和编译语言;脚本语言包括: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语言的现代性和简洁性。

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

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

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

相关文章

Perl 语言开发(十二):面向对象编程,深入理解与实践

目录 1. 概述 2. 面向对象编程基础 2.1 类与对象的基本概念 3. Perl中的面向对象编程 3.1 定义类和对象 3.1.1 创建类 3.1.2 创建对象 3.2.1 访问器和修改器 3.3 继承 3.3.1 创建基类 3.3.2 创建子类 3.3.3 使用继承 3.4 多态 3.4.1 方法重写 3.4.2 动态绑定 4…

git常用命令及git分支

git常用命令及git分支 git常用命令设置用户签名初始化本地库查看本地库状态将文件添加到暂存区提交到本地库查看历史记录版本穿梭 git分支什么是分支分支的好处分支的操作查看分支创建分支切换分支合并分支合并冲突 git常用命令 设置用户签名 //设置用户签名 git config --gl…

linux-conda环境安装教程

Linux Conda 环境安装教程 本文档详细介绍了在 Linux 系统上安装和使用 Conda 环境的步骤。 1. 安装 Conda 1.1 下载 Anaconda 安装包 首先&#xff0c;访问 Anaconda 官方网站 并下载适用于 Linux 系统的 Anaconda 安装包。 或者使用以下命令直接从终端下载&#xff1a; …

Datawhale 2024 年 AI 夏令营第二期——基于术语词典干预的机器翻译挑战赛

#AI夏令营 #Datawhale #夏令营 1.赛事简介 目前神经机器翻译技术已经取得了很大的突破&#xff0c;但在特定领域或行业中&#xff0c;由于机器翻译难以保证术语的一致性&#xff0c;导致翻译效果还不够理想。对于术语名词、人名地名等机器翻译不准确的结果&#xff0c;可以通…

emqx 负载均衡配置 HAProxy 健康检查 轮询 haship

HAProxy配置文件 配置文件&#xff1a; /etc/haproxy/haproxy.cfg 负载均衡参数&#xff1a; 轮询方式轮询注解roundrobin基于权重进行轮叫调度的算法&#xff0c;在服务器的性能分布比较均匀时&#xff0c;这是一种最公平合理&#xff0c;常用的算法。此算法使用较为频…

【银河麒麟高级服务器操作系统】数据中心系统异常卡死分析处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问&#xff1a;https://product.kylinos.cn 1.服务器环境以及配置 【机型】浪潮NF5280M5 处理器&#xff1a; Intel 内存&#xff1a; 1T 【内核版本】 4.19.90-24.4.v2101.ky10.x86_64 【OS镜像版本】 银河麒麟…

PDF 中图表的解析探究

PDF 中图表的解析探究 0. 引言1. 开源方案探究 0. 引言 一直以来&#xff0c;对文档中的图片和表格处理都非常有挑战性。这篇文章记录一下最近工作上在这块的探究。图表分为图片和表格&#xff0c;这篇文章主要记录了对表格的探究。还有&#xff0c;我个人主要做日本项目&…

MFC Ribbon菜单 - 中英文实时切换方法

简介 最近在搞一个老外的项目&#xff0c;本来谈的好好的&#xff0c;纯英文界面。项目接近尾声了&#xff0c;又提出了中英文实时切换的新需求&#xff0c;没办法就只能想办法&#xff0c;毕竟客户最大嘛。 实现方法 还好本来的ribbon英文菜单不复杂&#xff0c;就用纯C编码…

Android上如何使用perfetto分析systrace

Android上如何使用perfetto分析systrace Perfetto 是一个用于性能分析的工具&#xff0c;提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具&#xff0c;提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南&…

粉丝问我:大龄干运维还有出路吗?

这兄弟&#xff1a; 18年参加培训班&#xff0c;培训的java&#xff0c;结果学的不好。又去机构学了linux云计算&#xff0c;去做了运维&#xff0c;19年去一家网络公司做了idc&#xff0c;可以说这两年自己不努力&#xff0c;什么都没学到&#xff0c;基本等于零。 我现在就…

Python轻松添加行编号到Word文档及删除行编号

Word文档中的行号&#xff08;行编号&#xff09;功能是对于精细化的文档编辑以及解析非常有用的功能。添加行号能够极大地提升文档的可读性和定位效率&#xff0c;尤其是在需要引用特定行内容时&#xff0c;为读者提供了清晰的指引&#xff0c;避免了不必要的混淆和误解。然而…

Java BigInteger 类

目录 BigInteger 1. 如何获取一个BigInteger类型的对象&#xff1f; &#xff08;1&#xff09;构造方法 &#xff08;2&#xff09;静态方法 2. 常用方法 BigInteger 可以用来表示很大很大的数&#xff0c;有多大都可以。通过创建对象调用相应的方法。详见&#xff1a;…

【深度学习】本地运行 GraphRAG + Ollama

随着人工智能不断革新各个行业&#xff0c;对高效且经济的解决方案的需求日益增长。GraphRAG Local Ollama 应运而生&#xff0c;它是一款强大的 Microsoft GraphRAG 改进版&#xff0c;集成了使用 Ollama 下载的本地模型。这种改进让您可以告别昂贵的 OpenAPI 模型&#xff0c…

45、tomcat+课后实验

tomcat 1、tomcat tomcat和php一样&#xff0c;都是用来处理动态页面的。 tomcat也可以作为web应用服务器&#xff0c;开源的。 php .php tomcat .jsp nginx .html tomcat 是用Java代码写的程序&#xff0c;运行的是Java的web应用程序。 tomcat的特点和功能&#xff1a…

前端调试技巧(npm Link,vscode调试,浏览器调试等)

Npm Link 功能&#xff1a; 在本地开发npm模块的时候&#xff0c;我们可以使用npm link命令&#xff0c;将npm 模块链接到对应的运行项目中去&#xff0c;方便地对模块进行调试和测试 断点调试 vscode调试 Debug Vue2 Project 目标&#xff1a;在VSCode中调试项目代码…

DockerFile文件解析

DockerFile 要研究自己如何做一个镜像&#xff0c;而且微服务项目打包上云部署&#xff0c;Docker就是最方便的。 微服务打包成镜像&#xff0c;任何装了Docker的地方&#xff0c;都可以下载使用&#xff0c;极其的方便。 流程&#xff1a;开发应用>DockerFile>打包为…

vue3 高德地图api加载热力图及关闭 JSAPI v1.4.15

高德地图api加载天地图和2D热力图及关闭 JSAPI v1.4.15 地图API地址 [http://lbs.tianditu.gov.cn/server/MapService.html](http://lbs.tianditu.gov.cn/server/MapService.html)高德地图2D热力图地址 [https://lbs.amap.com/demo/loca-api/demos/loca_heatmap/loca_heatmap_…

负载均衡-轮询-两种简易实现

1、描述 下游可用的服务器目前有5个&#xff08;node&#xff09;&#xff0c;设计一个方法&#xff0c;方法没有任何参数&#xff0c;采用轮询的方式返回其中一个node&#xff1b; 2、使用环形链表 每次取下一个node即可。注意&#xff1a;需要保证线程安全&#xff01; // …

安泰高压功率放大器主要应用场景有哪些

高压功率放大器是一种专门设计用于处理高电压信号并提供大功率输出的设备。它们在各种领域中发挥着重要作用&#xff0c;以下是它们的主要应用场景和特点。 一、医疗设备 医疗成像&#xff1a;高压功率放大器在医疗成像设备中扮演关键角色&#xff0c;例如X射线设备和CT扫描仪。…

C++语法提高B-hook机制

Hook 机制 Hook 机制 是一种用于拦截和处理系统事件或函数调用的方法。通过 Hook 机制&#xff0c;程序可以在特定的事件发生时或函数调用之前、之后进行自定义操作。Hook 机制广泛应用于调试、性能监控、安全审计、功能扩展等领域。 Hook 机制的类型及实现方法 1. 消息 Hoo…