首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

逆向工程——汇编基础

了解计算机常用数制,特别是二进制、十六进制、八进制,以及计算机保存数据方法。 3。开放。接受汇编语言与高级语言差异,不是去指责它如何不好读。 4。经验。...####八进制数 八进制数现在已经不是很常用了,一个典型例子是Unix文件属性。八进制数形式是[八进制数]q、[八进制数]Q、[八进制数]o、[八进制数]O。例如,777Q。...虚拟8086模式是运行在保护模式实模式,为了32保护模式下执行纯16程序。它不是一个真正CPU模式,还属于保护模式。 ####模式区别 保护模式同实模式根本区别是进程内存受保护与否 。...操作内存是,首先需要就是他地址。 mov ax,[0] 方括号表示,里面的表达式指定不是立即数,而是偏移量。是模式,DS:0那个字会被装入AX。...(8,16,32),reg(8,16,32) mov mem(8,16,32),imm(8,16,32) 需要说明是,加减同样也可以[](取地址操作)中使用,例如: mov ax,[bx+10]

1.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

【学员笔记分享】0基础学逆向笔记精整理(一)

左移最终结果是不是全为0呢?) 注:xor运算可以用于加解密,因为它本身特性,可以进行一种还原操作。 对于作业题,前面几道只需将16进制数转换为2进制数,然后进行逻辑运算即可。...至于最后一题00001101,取出第5(这里老师应该讲错了,应该是第4我们计算逻辑,这应该是第四),其实很简单,将(00001101)&(00001000)即可,也可以用异或运算(实际我估计应该不会这么用...eax+ecx*4应该是 0x00041008不是0x00041002。...这里我顺便也把视频汇编代码打一遍吧(其中一些汇编代码意思我也不是很清楚,因为没有用过汇编代码直接写程序过,但是有些类似的结构可以通过C语言来进行一个类比,具体大家可以参考汇编代码书籍,如王爽老师书籍...DIV SRC ;如果是8,16,32,用AX,EAX,EDX.EAX分别除,商放在AL,AX,EAX,余数放在AH,DX,EDX IDIV SRC ;如果是8,16,32

90930

go语言调度器源代码情景分析之六:go汇编语言

MOVQ buf+0(FP), BX这一条指令把调用者传递进来指针buf放入BX寄存器可以看到,gogo函数是通过buf+0(FP)这种方式获取到参数。...从被调用函数(此处为gogo函数)角度来看,FP与函数栈帧之间关系如下图,可以看出FP寄存器指向调用者栈帧,不是被调用函数栈帧。 ? SB虚拟寄存器:保存程序地址空间起始地址。...BP,SP 操作数宽度(即操作数位数) AT&T格式汇编指令如果有寄存器操作数,则根据寄存器名字(比如rax, eax, ax, al分别代表64,32,16和8寄存器)就可以确定操作数到底是多少...(8,16,32还是64),所以不需要操作码后缀,如果没有寄存器操作数又是访存指令的话,则操作码需要加上后缀b、w、l或q来指定到底存取内存多少个字节。...NOSPLIT:指示编译器不要在这个函数插入检查栈是否溢出代码。 $16-8:数字16说明此函数栈帧大小为16字节,8说明此函数参数和返回值一共需要占用8字节内存。

1.3K31

Java】序列化和反序列化

序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件。序列化后字节流保存了Java对象状态以及相关描述信息。序列化机制核心作用就是对象状态保存与重建。...重要点在意思是按照不同类型方法去写入序列化数据,可以看上面实现Java对象序列化与反序列化方法。 我们实例实现了Serializable,所以执行writeOrdinaryObject方法。...跟进writeClassDescriptor(desc); 和true执行同一个方法: 开发,我们经常会遇到要经过for循环来判断该循环体是否包含或不包含某一元素,这个时候我们也常用一个boolean...“|=”可以轻松让我们完成实现。...要使用一个类,就要先把它加载到虚拟机加载完类之后,堆内存方法区中就产生了一个Class类型对象(一个类只有一个class对象),这个对象就包含了完整结构信息,我们可以通过这个对象看到类结构

11110

Java输入输出流详解

Java语言输入输出功能是十分强大灵活,美中不足是看上去输入输出代码并不是很简洁,因为你往往需要包装许多不同对象。...Java类库,IO部分内容是很庞大,因为它涉及领域很广泛:标准输入输出,文件操作,网络上数据流,字符串流,对象流,zip文件流。...java语言输入输出功能是十分强大灵活,美中不足是看上去输入输出代码并不是很简洁,因为你往往需要包装许多不同对象。...JavaIO,所有的stream(包括Inputstream和Out stream)都包括两种类型:   (1)字节流   表示以字节为单位从stream读取或往stream写入信息,即io包...高层流不是从输入设备读取,而是从其他流读取。同样高层输出流也不是写入输出设备,而是写入其他流。

1.1K30

NIO之Buffer缓冲区

1、标志 缓冲区存在三个基础游标:capacity(容量)、limit(限制)、position(当前)。...position无论合适都不能大于limit,如果任何写入操作将会导致position大于limit则写入失败抛出异常。...这个方法不是真的清空,而是将三个标志重置到最初位置。再写入数据,将原有数据覆盖,是逻辑上清空,不是物理清空。...内存映射文件I/O是通过使文件数据出现为内存数组内容来完成不是将整个文件读到内存,而是只有文件实际读取或者写入部分才会映射到内存。...底层数据其实是维护操作系统内存不是JVM里,DirectByteBuffer里维护了一个引用address指向了数据,从而操作数据。实现zero copy(零拷贝)。

27730

原理剖析:AutoMQ 如何基于裸设备实现高性能 WAL

云盘上持久化成功后才会返回客户端成功。数据读取则均会从内存读取并返回客户端。...结果见下表:从中可以看到,AutoMQ 很好地做到了读写隔离,追赶读时,实时读写性能几乎不受影响; Kafka 追赶读时,会导致发送消息延迟大幅增加,流量下跌严重。...而使用裸设备进行读写,避免了这些开销,写入延迟更低。下表对比了文件系统与裸设备上进行写入性能表现。可以看到,相较于文件系统,裸设备写入延迟明显更低,性能更好。...这是由于前文提到,Delta WAL 采用了轮转写入模式,物理点会在磁盘上循环,逻辑点则是单调递增。...恢复时,需要尽可能地恢复已经落盘 record,不是直接跳过。 5.4 读写裸设备前面提到过,Delta WAL 底层没有依赖文件系统,而是直接使用 Direct IO 读写裸设备。

12100

32和64系统区别

进程64和32和程序地址空间是32还是64有关,不是和操作系统有绝对关系64系统和32寻址能力比较1.64CPU拥有更大寻址能力,最大支持到16GB内存(了解64系统支持多少内存...,看下面介绍),32bit只支持4G内存64系统和32提取数据能力比较2.64cpu一次性可以提取64数据,比32提高了一倍,理论上性能会提升一倍。...(3)但是对于32进程而言,它认为自己有4个G空间,当然硬件上确实是可以做到 (4)对于64进程而言,它认为自己有大于8个G内存,甚至更加多,但是硬件上目前民用支持最多16个G内存,再大内存也没必要...它最大内存有264次方个比特,这是相当大一个内存,虽然硬件上是没有办法满足这么大内存,但是指针必须是8个字节,因为进程地址是虚拟,即使实际上没有这么大,进程也可以认为它有这么大。...注意: 之所以要和进程扯上关系,是因为进程地址是虚拟地址,即使实际内存只有1个G,一个32进程依然可以认为自己有4个G内存,因为进程使用自己虚拟内存时并不是全部使用,而是可能只使用一小部分

3.4K10

golang源码分析:go 汇编

目前使用最为广泛AMD64这种体系结构CPU,这种CPU共有20多个可以直接在汇编代码中使用寄存器,其中有几个寄存器操作系统代码才会见到,而应用层代码一般只会用到如下分为三类19个寄存器。...上述这些寄存器除了fs和gs段寄存器是16,其它都是64,也就是8个字节,其中16个通用寄存器还可以作为32/16/8寄存器使用,只是使用时需要换一个名字,比如可以用eax这个名字来表示一个...这里需要牢记就是rip寄存器不是正在被CPU执行指令在内存地址,而是紧挨这条正在被执行指令后面那一条指令地址。...操作数宽度(即操作数位数) AT&T格式汇编指令如果有寄存器操作数,则根据寄存器名字(比如rax, eax, ax, al分别代表64,32,16和8寄存器)就可以确定操作数到底是多少8...go汇编,寄存器名字没有位数之分,比如AX寄存器没有什么RAX, EAX之类名字,指令中一律只能使用AX。

88430

看完这个,Java IO从此不在难

设计 IO 相关类时,编写者也不是从同一个方面考虑,所以会给人一种很乱感觉,并且还有设计模式使用,更加难以使用这些 IO 类,所以特地对 Java IO 做一个总结。...提到磁盘,你可能会想到文件文件操作 IO 是比较典型操作。 Java 引入了 “流” 概念,它表示任何有能力产生数据源或有能力接收数据源对象。...字符流是以多个字节来运输,比如一桶一桶取水,一桶水又可以分为几杯水。...按字节和字符划分.png 不可否认,Java IO 相关类确实很多,但我们并不是所有的类都会用到,我们常用也就是文件相关几个类,如文件最基本读写类 File 开头文件读写带缓冲区类 Buffered...32 ,只有低 8 写入,高 24 将舍弃。

74250

Java进阶-IO(4)

\date1_24.txt 文件长度:72字节 文件或者目录:是文件 文件或者目录:不是目录 是否可读:可读取 是否可写:可写入 是否隐藏:不是隐藏文件 最后修改日期:Tue Jan 24 11:33:...二、动态读取文件内容 所谓动态读取,就是从文件任意位置开始访问文件不是必须从文件开始位置读取到文件末尾。...从文件读取一个带符号字节 char readChar() 从文件读取一个字符 int readlnt() 从文件读取一个带符号整数 long readLong() 从文件读取一个带符号...序列化小结 将序列化对象写入文件之后,可以文件读取出来,并且对它进行反序列化,即对象类型信息、对象数据,还有对象数据类型可以用来在内存中新建对象。...整个过程都是 Java 虚拟机(JVM)独立,说明一个平台上序列化对象可以另一个完全不同平台上反序列化该对象。

14421

JavaSE 基础学习之五 —— IO 操作 (java. io.*)

isFile(): 判断是否文件; isDirectory(): 判断是否为路径; delete(): 删除文件或路径 基本操作可在下面例程展示: 例 1: 遍历一个目录下包括子目录在内所有...字节流 文件 Java 通过流进行操作,基本可以分为读与写两种操作。 Java 可以文件流分为字节流和字符流两种。...另外需要注意还有: 装饰者与被装饰者必须是同样类型(即具有同样抽象基类)。 装饰者与被装饰者继承于同样抽象基类,是为了有正确类型,不是继承抽象基类行为。...注: 简单地说明 Serializable 接口,就是可以将一个对象(标志对象类型)及其状态转换为字节码,然后保存起来(可以保存在数据库,内存,文件等),即序列化过程;然后可以适当时候再将其状态恢复...换句话说,这个字段生命周期仅存于调用者内存不会写到磁盘里持久化。

65420

从硬件角度窥探32机上Hotspot如何实现volatile修饰double,long原子性

仅供参考,如有不妥之处,请多指正 在网上看到许多博客说 java volatile 修饰 double 和 long 32 机上也是保证原子性。...1.先查看 ARM体系 src\cpu\aarch32\vm\templateTable_aarch32.cpp 文件,找到 putfield_or_static 这个方法,这个方法是具体java...第一行 pop 只是将操作数栈 栈顶值,pop 到 rax 寄存器,rax 寄存器值是要写入到对应 long 变量内存里 第二行是查看是否是 写静态变量,如果不是,则需要将 被修改实例地址...最后要说是, ARM ,无论是否是 volatile 修饰 ,long 和 double 都要使用 上述 ldrexd 和 strexd,所以可以猜测, ARM-32 下hotspot,就算对...如果不是64机,则先对 高32部分写入,然后再对 低32写入。如果是64机,则写入一次即可(第二句) ?

37510

2019-10-22-音频码率估算

采样率 采样率即声音采样频率,即每秒记录多少个音量点。对于人耳来说,声音范围是20-20khz,说话声音范围是300-3400hz。...那么对于音频文件来说,一般44.1khz采样率就可以满足了,再高人也听不到。而对于通话场景,11.025khz即可。这也是为什么语音通话不那么耗费流量原因。...采样深度 采样深度一般有8,16,32等,即使用几个位来表示音量大小。可以类比下图片,颜色深度越大,能够表现色彩就会越丰富。...以44.1khz,双通道,16音频信号,他码率=44.1*2*16=1411.2kbps=1.4Mbps 是不是很惊讶?我家下载速度还没这个快呢。...---- 参考文献: 音频采样率和码率简介 - 简书 常见音频编码格式总结 - tianx3344个人空间 - OSCHINA AAC和MP3码率压缩上一些事 - 简书 奈奎斯特频率 - 维基百科

1.2K30

JavaJava基本类型解读

double: Java双精度浮点数类型,占用64(8字节)内存,精度约为15有效数字。通常用于存储需要更高精度浮点数值,如科学计算、金融计算等。...Java,char类型占用16(2字节)内存,采用Unicode编码。可以表示各种语言字符,包括ASCII字符和非ASCII字符。...例如,对于浮点数进行大量累加运算可能会导致精度损失,超出整型范围数值运算则可能导致溢出。为了避免这些问题,可以使用适当数据类型,并在必要时进行类型转换或使用更高精度数据类型。...因此,在读取、写入文件或进行网络通信时,建议使用UTF-8编码来处理中文字符,以保证字符正确传输和显示。 其次,进行字符编码转换时,必须使用合适转换方法,并明确指定源编码和目标编码。...假设我们需要将一个包含中文字符字符串写入文件,并且确保文件编码方式为UTF-8。

7010

最基本调试是NSLog及DEBUG预处理器宏

此外,您应用程序运行期间,可以观察所产生并写入到控制台,应用程序它们所描述正在发生事件日志消息。...而且,在这个文件这个时刻,你现在有足够信息来开始使用NSLog调试您应用程序.但是,你应该继续往下看:本文档剩余部分补充说,你可以使用授权您可以项目更有效地使用记录更多详细信息。...独特且易于查找文本模式 每个日志声明,它是有用,包括一些独特并且容易找到文本模式,所以如果你确定该日志语句有问题,可以很容易地通过你文件搜索和找到它位置 变量和属性值 你在你应用程序关键地方打印变量和属性可以验证这些值是否是允许范围之内...- 8,16,32或64),并且将任何必要强制类型转换为你不会产生任何编译器警告 谁正在被调用 分析应用程序操作是至关重要,你可以知道那些程序那些功能被顺序调用。...NSLog需要时间去执行,如果你在你应用程序里面加了很多这样代码,将加大你程序运行时间。测试过程,这通常不是问题。

1.4K30

Java NIO 核心组件学习笔记

对于I/O操作,根据Oracle官网文档,同步异步划分标准是“调用者是否需要等待I/O操作完成”,这个“等待I/O操作完成”意思不是指一定要读取到数据或者说写入所有数据,而是指真正进行I/O操作时...,比如数据TCP/IP协议栈缓冲区和JVM缓冲区之间传输这段时间,调用者是否要等待。...通道使用起来跟Stream比较像,可以读取数据到Buffer,也可以把Buffer数据写入通道。 ?...可以发现,它们值为1都是错开,因此对它们进行按或运算之后得出值就没有二义性,可以反推出是由哪些变量运算而来。怎么判断呢,没错,就是“按与”运算。...要解决这些问题,需要一个严谨繁琐设计,不过幸运是,我们有开源框架可用,那就是优雅强大Netty,Netty基于Java NIO,提供异步调用接口,开发高性能服务器一个很好选择,之前项目中使用过

48720

Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)

File类 基本概念 java.io.File 类主要用于描述文件或目录路径抽象表示信息,可以获取文件或目录特征信息,如:大小等。...off 开始 len 个字符写入文件输出流 void write(char[] cbuf) 将 cbuf.length 个字符从指定字符数组写入文件输出流 void flush() 刷新流 void...off 开始 len 个字节写入文件输出流 void write(byte[] b) 将 b.length 个字节从指定字节数组写入文件输出流 void flush() 刷新此输出流并强制写出任何缓冲输出字节...经验分享 当希望将多个对象写入文件时,通常建议将多个对象放入一个集合,然后将集合这个整体看做一个对象写入输出流,此时只需要调用一次 readObject 方法就可以将整个集合数据读取出来,从而避免了通过返回值进行是否达到文件末尾判断...在线程池编程模式下,任务是提交给整个线程池,不是直接交给某个线程,线程池拿到任务后,它就在内部找有无空闲线程,再把任务交给内部某个空闲线程,任务是提交给整个线程池,一个线程同时只能执行一个任务

75320

Java_IO流(精讲)包含练习题及答案

输入流: 只能从中读取数据,不能向其写入数据。 输出流:只能向其写入数据,不能向其读取数据。 按照操作单元划分,可以划分为字节流和字符流。...IO流常用到五个类和一个接口 整个Java.io包中最重要就是5个类和一个接口。..., //统一写完之后需要刷新将数据写入到对应文件,并清空缓存区 //读完要关闭,fw.close();一般finally写 } } 练习题: 1、FileReader fr读取是一个文件还是一个字符串...A、ClassNotFoundException B、IOException C、SQLException D、RemoteException 2、JavaIO操作,(...按操作数据单元分: 字节流、字符流 |-字节流:8 |-字符流:16 可以操作所有文件,包括文本文件、视频、音频、压缩文件等等都可以用字节流读写。

51830
领券