尚硅谷2020最新版宋红康JVM教程-中篇-第2章Class文件结构-1-概述

深入 Android syscall 实现:内联汇编系统调用 + NDK 汇编构建 由于我们内联汇编 syscall 需要和原来的汇编保持一致,不需要编译器自动生成的函数入口代码和退出代码,所有需要用到 “裸函数”(naked function)。裸函数是一种特殊的函数,它允许你直接控制函数的汇编指令,而不会自动为你生成函数的入口代码(如保存寄存器、调整栈指针)和退出代码(恢复寄存器、恢复栈指针)。直接内联汇编实现 syscall 调用可以让你跳过标准库的封装层,隐藏 syscall 调用,防 hook 增加逆向难度。在 C++ 代码文件中添加 raw_syscall 函数声明。 阅读详情

引言

  • Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。
  • Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码。
  • 由于限制了Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能超过256条。
  • 官方文档:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html
  • 熟悉虚拟机的指令对于动态字节码生成、反编译Class文件、Class文件修补都有着非常重要的价值。因此,阅读字节码作为了解Java虚拟机的基础技能,需要熟练掌握常见指令。
    在这里插入图片描述

执行模型

如果不考虑异常处理的话,那么Java虚拟机的解释器可以使用下面这个伪代码当做最基本的执行模型来理解

do{
	自动计算PC寄存器的值加1;
	根据PC寄存器的指示位置,从字节码流中取出操作码;
	if(字节码存在操作数)从字节码流中取出操作数;
	执行操作码所定义的操作;
}while(字节码长度>0);

字节码与数据类型

  • 在Java虚拟机的指令集中,大多数的指令都包含了其操作所对应的数据类型信息。例如,iload指令用于从局部变量表中加载int型的数据到操作数栈中,而fload指令加载的则是float类型的数据。
  • 对于大部分与数据类型相关的字节码指令,它们的操作码助记符中都有特殊的字符来表明专门为哪种数据类型服务:
    • i代表对int类型的数据操作
    • l代表1ong
    • s代表short
    • b代表byte
    • c代表char
    • f代表float
    • d代表double
  • 也有一些指令的助记符中没有明确地指明操作类型的字母,如arraylength指令,它没有代表数据类型的特殊字符,但操作数永远只能是一个数组类型的对象。
  • 还有另外一些指令,如无条件跳转指令goto则是与数据类型无关的。
  • 大部分的指令都没有支持整数类型byte、char和short,甚至没有任何指令支持boolean类型。编译器会在编译期或运行期将byte和short类型的数据带符号扩展(Sign-Extend)为相应的int类型数据,将boolean和char类型数据零位扩展(Zero-Extend)为相应的int类型数据。与之类似,在处理boolean、byte、short和char类型的数组时,也会转换为使用对应的int类型的字节码指令来处理。因此,大多数对于boolean、byte、short和char类型数据的操作,实际上都是使用相应的int类型作为运算类型。
    • byte b1=12; short s1=10; int i=b1 +s1;

指令分类

  • 由于完全介绍和学习这些指令需要花费大量时间。为了让大家能够更快地熟悉和了解这些基本指令,这里将JVM中的字节码指令集按用途大致分成9类。
    • 加载与存储指令
    • 算术指令
    • 类型转换指令
    • 对象的创建与访问指令
    • 方法调用与返回指令
    • 操作数栈管理指令
    • 比较控制指令
    • 异常处理指令·
    • 同步控制指令
  • (说在前面)在做值相关操作时:
    • 一个指令,可以从局部变量表、常量池、堆中对象、方法调用、系统调用中等取得数据,这些数据(可能是值,可能是对象的引用)被压入操作数栈。
    • 一个指令,也可以从操作数栈中取出一到多个值(pop多次),完成赋值、加减乘除、方法传参、系统调用等等操作。
syscall的检测与绕过 通过汇编直接NtCreateThreadEx在函数种通过syscall进入ring0。此时的调用是非常明显的,能看到Ntdll中NtCreateThread的调用。此时直接通过我们的主程序进入ring0。通过procmon进行监控。 阅读详情

相关推荐

Windows内核--裸调系统调用(4.1)

ntdll.dll NtCreateProcess将服务号0x82传入,通过syscall调入内核系统调用例程。syscall在做什么?在64位系统上,Windows使用syscall指令实现系统服务分发。syscall实现和int 2E类似的作用,只不过它更快速,看它名字"快速调用"。 本文将新增一个系统调用来加深对syscal的理解。

编程语言开发、框架原理、编程思想、最佳实践技巧经验分享。致力于各种编程技术的技巧经验干货分享,讲解开发避坑技巧,追踪开发前沿技术,实战展开解决难题。 程序员小迷助您在编程路上越走越好! 1559

【Linux】syscall系统调用原理及实现

linux syscall系统调用

种一棵树最好的时间是十年前,其次是现在 1万+

记JVM学习——尚硅谷宋红康JVM全套教程(详解java虚拟机)

记JVM学习——尚硅谷宋红康JVM全套教程(详解java虚拟机) 看完整套视频之后的感触是,讲的真的很好,很细致。推荐大家去学习。 下面是根据视频整理的笔记 尚硅谷宋红康JVM全套教程详解java虚拟机 JVM上篇:内存与垃圾回收 JVM与java体系结构 类加载器子系统 运行时数据区概述及线程 各部分详解 程序计数器 虚拟机栈 本地方法栈 堆 方法区 相关知识 对象的实例化、内存布局与访问定位 直接内存 String table 垃圾回收 概述 垃圾回收相关算法 垃圾回收相关概念 垃

weixin_43967582的博客 5429

3分钟了解syscall系统调用|详细易懂的流程

系统调用(syscall)是操作系统提供给程序以请求内核服务的一种机制。和int 0x80提供相同的服务。系统调用是操作系统提供给应用程序的一种重要接口,它使得程序能够安全、有效地执行需要操作系统干预的操作,如文件处理、进程管理等。尽管系统调用引入了一定的性能开销,但它的安全性和易用性使得它成为操作系统设计中不可或缺的一部分。SYSCALL减少了上下文切换和简化了指令执行流程,性能更高,但对旧机器的兼容性不如int 80h.

weixin_43356770的博客 6868

【尚硅谷】JVM-字节码篇

官方的说明:Oracle JDK下载路径:Open JDK下载路径:Oracle与OpenJDK之间的主要区别Oracle JDK版本将每三年发布一次LTS版本,而OpenJDK版本每三个月发布一次。Oracle JDK将更多地关注稳定性,它重视更多的企业级用户,而OpenJDK经常发布以支持其他性能,这可能会导致不稳定。Oracle JDK支持长期发布的更改,而Open JDK仅支持计划和完成下一个发行版。

時光的博客 1162

从法律文档到知识图谱

这里我们定义了两个 Pydantic 模型:Location 用于捕捉结构化的地址信息,包含可选的国家、州和地址字段;Party 用于表示合同参与方,包含必填的名称和可选的位置详情。字段描述通过告知 LLM 每个字段具体需要查找哪些信息,来辅助提取过程。"""包含结构化地址组件的位置信息。"""country: Optional[str] = Field(None, description="国家")

Anspire的博客 3030

尚硅谷 宋红康 JVM教程_02_字节码与类的加载篇

目录 尚硅谷 宋红康 JVM教程 学习笔记 https://www.bilibili.com/video/BV1PJ411n7xZ ppt地址: https://download.youkuaiyun.com/download/wei198621/14040543 JVM参数列表: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html P204-JVM中篇内容概述 11:51 P205-字节码文件的跨平台性 13:12 P2

狗剩的专栏 1437

sldd数据字典导出为excel

sldd导出为excel

zpfjf的博客 2237

尚硅谷2020最新版宋红康JVM教程-中篇-第1章Class文件结构-3-Class文件结构

魔数:Class文件的标志 官方文档位置: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html Class文件版本号

admin741admin的博客 1063

图文带你理解什么是Few-shot Learning

Few-shot Learning(少样本学习)是Meta Learning(元学习)中的一个实例1,所以在了解什么是Few-shot Learning之前有必要对Meta Learning有一个简单的认识。不过在了解什么是Meta Learning之前还是要了解一下什么是Meta。因此,阅读本文后你将对如下知识有一个初步的了解。 What is Meta What is Meta Learning What is Few-shot Learning 1. What is Meta? meta就是描述

Pr4da的博客 1万+

如何用谷歌插件Apollo.io高效开发客户?手把手教你避开常见坑点

本文详细介绍了如何利用谷歌插件Apollo.io高效开发外贸客户,包括核心功能解析、免费额度最大化利用策略、多插件协同技巧以及常见陷阱规避方法。通过Apollo.io的智能匹配算法和庞大数据库,外贸从业者可以精准锁定目标客户,提升开发效率。

banana的博客 885

尚硅谷2020最新版宋红康JVM教程-中篇-第1章Class文件结构-1-字节码文件的跨平台性

字节码文件的跨平台性 Java语言:跨平台的语言(write once,run anywhere) 当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译。 这个优势不再那么吸引人了,Python、PHP、Per1、Ruby、Lisp等有强大的解释器。 跨平台似乎已经快成为一门语言必选的特性。 Java虚拟机:跨语言的平台 Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格所关联。无论使用何种语言进行软件开发,只要能将源文件编译为正

admin741admin的博客 634

计数译码驱动显示电路实验报告_京东方G0A电路、阵列基板、显示 装置及驱动方法广州威彩...

图1、实施例二所述的选择子单元的结构示意图图2、实施例四所述的GOA电路结构示意图图3、实施例七所述的阵列基板的局部结构示意图图4、实施例所述的极性反转驱动方法的第一场的各信号时序图图5、实施例所述的极性反转驱动方法的第二场的各信号时序图图6、实施例所述的极性反转驱动方法的第三场的各信号时序图图7、实施例所述的极性反转驱动方法的第四场的各信号时序图图8、为图4所示时序下,实施例八所述显示...

weixin_35696112的博客 924

Java学习笔记----第二部分:java高级编程(尚硅谷宋红康老师讲授)

java基础中多线程学习、java反射、泛型和常用类、IO流、网络编程、枚举类与注解

m0_52574098的博客 4123

DO-178C详解:机载软件开发、验证与适航标准指南

DO-178C将软件划分为五个等级(A到E),这些等级是基于失效状态对航空器安全的影响而定。

qq_41854911的博客 2847

16、二阶差分功耗分析(DPA)的再审视

本文深入探讨了二阶差分功耗分析(DPA)中的关键问题,包括不同组合函数的性能、信息论分析以及在有轮廓和无轮廓攻击场景下的实验结果。通过对掩码AES和DES的模拟和实际攻击实验,研究了归一化乘积、求和和绝对差值等组合函数在不同噪声水平下的效率,并强调了信息论分析在评估侧信道对抗措施中的重要性。

leaf8的博客 117

尚硅谷2020最新版宋红康JVM教程-2-类加载子系统

类加载器子系统 文章目录类加载器子系统1.简图2.详细图3.类加载子系统作用4.类加载器ClassLoader角色5.类的加载过程1.加载2.链接验证(Verify):准备(Prepare) :解析(Resoe) :3.初始化4.例子 1.简图 2.详细图 3.类加载子系统作用 1.类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。(在链接阶段中验证阶段去验证文件标识) 2.ClassLoader只负责class文件的加载,至于他是否可以运行,则由

m0_49760452的博客 519

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 455

尚硅谷2020最新版宋红康JVM教程-中篇-第1章Class文件结构-2-虚拟机的基石:Class文件

字节码文件里是什么? 源代码经过编译器编译之后便会生成一个字节码文,字节码是一种二进制的类文件,它的内容是JVM的指令,而不像C、C++经由编译器直接生成机器码。 什么是字节码指令(byte code)? Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(operand)所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。 比如 操作码 操作数 solt1-3是现成的,不需要额外操作数 如何解读供虚拟机

admin741admin的博客 398

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

尚硅谷2020最新版宋红康JVM教程-中篇-第4章:再谈类的加载器-04-ClassLoader源码解析

引言 除了以上虚拟机自带的加载器外,用户还可以定制自己的类加载器。Java提供了抽象类java.lang.ClassLoader,所有用户自定义的类加载器都应该继承ClassLoader类。 关于Launcher类 ClassLoader的主要方法 抽象类ClassLoader的主要方法:(内部没有抽象方法) public final ClassLoader getParent() 返回该类加载器的超类加载器 public Class<?> loadClass(String

admin741admin的博客 312

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

尚硅谷2020最新版宋红康JVM教程-中篇-第3章类的加载过程(类的生命周期)详解-1-概述

引言 在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 其中,验证、准备、解析3个部分统称为链接(Linking) 从程序中类的使用过程看: 大厂面试题 蚂蚁金服: 描述一下JvM加载Class文件的原理机制? 一面:类加载过程 百度: 类加载的时机 java类加载过程? 简述java类加载机制? 腾讯: JVM

admin741admin的博客 408

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

尚硅谷2020最新版宋红康JVM教程-中篇-第3章类的加载过程(类的生命周期)详解-2-过程一:Loading(加载)阶段

加载完成的操作 加载的理解 所谓加载,简而言之就是将Java类的字节码文件加载到机器内存中,并在内存中构建出Java类的原型——类模板对象。所谓类模板对象,其实就是Java类在]VM内存中的一个快照,JVM将从字节码文件中解析出的常量池、类字段、类方法等信息存储到类模板中,这样]VM在运行期便能通过类模板而获取Java类中的任意信息,能够对Java类的成员变量进行遍历,也能进行Java方法的调用。 反射的机制即基于这一基础。如果JVM没有将Java类的声明信息存储起来,则JVM在运行期也无法反射。 加载

admin741admin的博客 323

<JVM中篇:字节码与类的加载篇>01-Class字节码文件结构

Class文件结构 1. Class字节码文件结构 类型 名称 说明 长度 数量 魔数 u4 magic 魔数,识别Class文件格式 4个字节

VectorX's Blog 2674

JVM学习总结:字节码篇

Java JVM 字节码

1196

获取ClassLoader的方法

链接: 尚硅谷宋红康JVM全套教程.

m0_46672151的博客 487

尚硅谷JVM学习笔记:1.JVM与Java体系结构

开发人员如何看待上层框架一些有一定工作经验的开发人员,打心眼里觉得SSM、微服务等上层计算才是重点,基础技术并不重要,这其实是一种本末倒置的"病态"如果我们把核心类库的API比做数学公式的话,那么Java虚拟机的知识就好比公式的推导过程。字节码我们平时说的Java字节码,指的是用Java语言编译成字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该称为jvm字节码不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。

weixin_60347335的博客 623
上一篇: 尚硅谷2020最新版宋红康JVM教程-中篇-第1章Class文件结构-3-Class文件结构
下一篇: 尚硅谷2020最新版宋红康JVM教程-中篇-第3章类的加载过程(类的生命周期)详解-1-概述
zgcadmin
博客等级 码龄9年 174粉丝 109原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值