字节序

Android Protect-0.Apk文件结构简介

佐手、 提交于 2020-01-21 01:21:07
文章目录 1. APK 文件结构 2. APK 文件的生成流程 3. classes.dex 3.1 DEX 文件结构 3.1.1 LEB128 3.1.2 DexHeader 3.1.3 DexMapList 3.1.4 DexStringld 3.1.5 DexTypeld 3.1.6 DexProtoId 3.1.7 DexFieldld (标识了类成员) 3.1.8 DexMethodld 3.1.9 DexClassDef 3.2 DEX 文件的验证与优化过程 3.3 DEX 文件的修改 4. AndroidManifest.xml(AXML 文件格式) 4.1 Header 4.2 String Chunk 4.3 ResourceId Chunk 4.4 XmlContent Chunk 4.5 AXML 文件的修改 5.resources.arsc 5.1 ARSC 文件格式 5.1 Header、 String Chunk 5.2 ResTable_package 5.3 TypeStrings、KeyStrings 5.4 ResTable_typeSpec、ResTable_type 6. META-INF 目录 6.1 CERT.RSA 6.2 MANIFEST.MF 6.3 CERT.SF window 中可以配合 Cygwin 查看。 1. APK

文件编码格式详解

旧巷老猫 提交于 2020-01-21 00:11:48
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码:  00110101 00110110 00110111 00111000      ↓     ↓    ↓    ↓ 十进制码: 5     6    7    8 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。 这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF

UNP——第三章,套接字编程介绍

徘徊边缘 提交于 2020-01-20 22:27:16
1.套接字结构   多数套接字函数都有套接字结构参数,每个协议族都定义了自己的套接字结构,以 sockaddr_ 开始,并对应协议族的唯一后缀。   如 IPv4 sockaddr_in     IPv6 sockaddr_in6    Unix sockaddr_un 链路 sockaddr_dl 存储 sockaddr_storage struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }   其中 sin_len 用于内核层,在应用读写都无意义。   sin_zero 没有用处。   POSIX也要求要定义 sin_family, sin_addr, sin_port 2.传参   套接字调用,参数以引用方式,在内核和应用传递。   当参数 ,应用 ----> 内核,需要传 len_of_socket     如: bind, connect, sendto    内核 -----> 应用,需要传 &len_of_socket     即 len_of_socket 做输入,输出参数。 3.字节序   网络字节序为大端,即先存储数据高位。   小端,则为 先存储数据地位。  

UDP 编程

爷,独闯天下 提交于 2020-01-18 01:30:52
2.1 字节序,地址转换 2.1.1字节序概述 字节序概念: 多字节数据的存储顺序 分类: 小端格式:低位字节数据存储在低地址 大端格式:高位字节数据存储在低地址 注意: LSB:低地址 MSB:高地址 确定主机字节序程序: #include <stdio.h> int main(int argc, char *argv[]) { union { short s; char c[sizeof(short)]; }un; un.s = 0x0102; if((un.c[0] == 1) && (un.c[1] == 2)) { printf("big-endian\n"); } else if((un.c[0] == 2) &&(un.c[1] == 1)) { printf("little-endian\n"); } return 0; } 特点: 网络协议指定通讯字节序——大端 多字节数据处理时考虑字节序 运行在主机的进程互相通信,不用考虑字节序 异构计算机通信,需要转换字节序为网络字节序 2.1.2 htonl函数 /* 功能: 将32位主机字节序数据转换成网络字节序数据 参数: hostint32:待转换的32位主机字节序数据 返回值: 成功:返回网络字节序的值 */ #include <arpa/inet.h> uint32_t htonl(uint32_t

Linux-C网络编程

旧巷老猫 提交于 2020-01-15 00:13:56
简介 基础是TCP/IP协议,网上资料很多不再赘述。 推荐《图解TCP/IP》 socket编程 网络字节序 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出, 接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存 因此,网络数据流的地址规定:先发出的数据是低地址,后发出的数据是高地址 TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。 例如UDP段格式,地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8) 则地址0是0x03,地址1是0xe8,也就是先发0x03,再发0xe8 这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址存0xe8。 但是,如果发送主机是小端字节序的,这16位被解释成0xe803,而不是1000。 因此,发送主机把1000填到发送缓冲区之前需要做字节序的转换。 同样地,接收主机如果是小端字节序的,接到16位的源端口号也要做字节序的转换。 如果主机是大端字节序的,发送和接收都不需要做转换。 同理,32位的IP地址也要考虑网络字节序和主机字节序的问题。 网络字节序转换 为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行 可以调用以下库函数做网络字节序和主机字节序的转换 #include <arpa/inet.h> uint32_t htonl

Linux学习之socket编程(一)

家住魔仙堡 提交于 2020-01-15 00:13:43
socket编程 socket的概念:     在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。   在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连 接的一对一关系。   TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socketAPI。   本章的主要内容是socket API,主要介绍TCP协议的函数接口,最后介绍UDP协议和UNIXDomain Socket的函数接口。 socket socket-api 1.基础知识 网络字节序     我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址。   TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节

C语言实现ping命令(一)

霸气de小男生 提交于 2020-01-11 18:57:04
ping命令使用到了网络中的ICMP协议: 关于ICMP介绍看这里: https://www.cnblogs.com/wanghao-boke/p/11670473.html 网络地址信息 地址信息表示: 网络传输时地址信息包括: 地址族(基于IPV4还是IPv6的地址族) IP地址 端口号 使用相关结构体来纪录地址信息: struct sockaddr_in{ sa_family_t sin_family; // 地址族 uint16_t sin_port; // 端口号 struct in_addr sin_addr; // 32位IP地址 char sin_zero[8]; // 不使用 }; struct in_addr{ in_addr_t s_addr; // 32位IP地址 }; struct in_addr{ in_addr_t s_addr; // 32位IP地址 }; #define in_addr_t uint32_t //无符号整型32位 还可以使用以下结构体: struct sockaddr{ sa_family_t sin_family; // 地址族 char sa_data[14]; // IP地址和端口 }; 成员sa_data保存的信息包含IP地址和端口号,剩余部分填充0。 在使用时定义信息地址时使用struct sockaddr_in结构体

套接字(socket)编程简单实现server-client聊天程序

白昼怎懂夜的黑 提交于 2020-01-10 07:10:10
1、socket 在TCP/IP协议中,一个IP地址标识网络通讯中唯一一台主机,而一个IP地址+一个TCP(或UDP)端口号就可以标识网络通讯中的一个进程,此时的IP地址+端口号即称为socket。 内存中的多字节数据相对于内存地址有大小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大小端之分,网络数据流同样也有大小端之分:先发出的数据是低地址,后发出的数据是搞地质,TCP/IP协议规定网络数据流采用大端字节序,即低地址高字节。 1)计算机分为大端机和小端机,那么如何使同样的C代码在大端机和小端机上都能正常运行呢?库函数一节为我们提供了转换的接口: include<arpa/inet.h> unit32_t htonl(unit32_t hostlong);//32位的长整数从主机字节序转换为网络字节序 unit16_t htons(unit16_t hostshort);//16位的短整数从主机字节序转换为网络字节序 unit32_t ntohl(unit32_t netlong);//32位的长整数从网络字节序转换为主机字节序 unit16_t ntohs(unit16_t netshort);//16位的短整数从网络字节序转换为主机字节序 2)由于网络传输是二进制比特流传输

sockaddr与sockaddr_in的区别

依然范特西╮ 提交于 2019-12-23 09:46:48
本文转自: https://blog.csdn.net/will130/article/details/53326740/ struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。 一、sockaddr sockaddr在头文件 #include <sys/socket.h> 中定义,sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下: struct sockaddr { sa_family_t sin_family;//地址族    char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息    }; 二、sockaddr_in sockaddr_in在头文件 #include<netinet/in.h>或#include <arpa/inet.h> 中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下: sin_port和sin_addr都必须是网络字节序(NBO),一般可视化的数字都是主机字节序(HBO)。 三、总结 二者长度一样,都是16个字节,即占用的内存大小是一致的,因此可以互相转化。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。 sockaddr常用于bind、connect、recvfrom

面经整理——(百度美团鹅厂网易等)

岁酱吖の 提交于 2019-12-22 01:52:22
百度 一面 算法题: 手写快排、单例模式、死锁 1 介绍下RPC 2 看过Dubbo源码是吧? 说下dubbo怎么区分不同的服务? 怎么服务降级? 负载均衡的方法?具体到每种的原理。源码级别 服务端没注册客户端运行会出现什么结果? 3 介绍下CQRS 4 问基础 HashMap是怎么扩容的?为什么是二的次幂?具体到元素是怎么计算index的? 5 JVM内存模型? 程序计数器到底存了什么东西,举例。常量池 到底存在哪了? 6 ThreadLocal ThreadLocalMap中的Key到底存了啥 7 AOP原理的? @before 如果抛出了异常代码还会执行嘛 8 Cookie和Session的区别 二面 1 浏览器输入baidu.com 经历了啥 2 CDN和DNS执行顺序 3 HTTPS和HTTP有什么区别 HTTPS执行流程图 4 页面加速加载 用了哪些技术 网易 一面: 1)介绍项目 项目里面最大的困难 项目细节,如何保证数据一致性和可靠性的 你是怎么快速熟悉业务做需求的? 2)基础 说说对高并发的理解 对多线程的理解 给你个场景?火车站卖票问题,如何解决超卖?加锁 AutomaticInteger ,具体的原理? CAS中存在的ABA问题怎么解决的?加版本控制 3)数据库 场景假设:1000W数据,需要在前端显示,怎么写sql或注意哪些内容 二面: 1)介绍项目 2