poke

Fix-Mapped Addresses

不问归期 提交于 2021-02-12 01:44:27
一、前言 某天,wowo同学突然来了一句:如果要在start_kernel中点LED,ioremap在什么时间点才能调用呢?我想他应该是想通过点LED灯来调试start_kernel之后的初始化的代码(例如DTB解析部分的代码)。那天,我们两个花了二十分钟的时间,讨论相关的问题,我觉得很有意思,因此决定写fix mapped address这样的一份文档。 在汇编代码中,由于没有打开MMU,想怎么访问外设都很简单,直接使用物理地址即可,然而,进入start kernel之后(打开了MMU),想要访问硬件都是那么的不方便,至少需要通过ioremap获取了虚拟地址之后才可以访问。但是,实际上,在内核的启动的初始阶段,内存管理子系统还没有ready,ioremap还不能调用(在mm_init之后可以正常使用)。 实际上,这个需求是和early ioremap模块相关,此外,还有一些其他的需求,内核合并了这些需求并提出了fix mapped address的概念。本文就是描述关于fix mapped address的方方面面,BTW,本文的代码来自4.4.6内核,体系结构相关的代码依然选择的是ARM64。 二、什么是fixmap? Fix map中的fix指的是固定的意思,那么固定什么东西呢?其实就是虚拟地址是固定的,也就是说,有些虚拟地址在编译(compile-time

Python制作扑克牌发牌程序,另含大量Python代码!

流过昼夜 提交于 2021-01-01 07:40:44
题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌。 提示: 设计出3个类:Card类、Hand类和Poke类。 Card类代表一张牌,其中FaceNum字段指出是牌面数字1~13,Suit字段指出的是花色,值“梅”为梅花,“方”为方块,“红”为红心,“黑”为黑桃。 Hand类代表一手牌,可以认为是一位牌手手里的牌,其中cards列表变量存储牌手手里的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手。 Poke类代表一副牌,可以把一副牌看作是有52张牌的牌手,所以继承Hand类。 1.1 输出样例 This is a module with classes for playing cards. 牌手 1:红桃6 黑桃6 梅花A 方片6 黑桃2 梅花10 红桃3 方片4 方片10 黑桃J 红桃Q 红桃10 红桃8 牌手 2:梅花J 梅花9 红桃7 红桃2 方片K 黑桃K 梅花3 方片7 黑桃Q 黑桃10 梅花Q 梅花8 黑桃7 牌手 3:梅花2 方片A 黑桃3 方片9 黑桃4 红桃K 红桃J 梅花7 红桃4 方片2 梅花4 梅花6 红桃5 牌手 4:黑桃5 红桃9 方片8 梅花5 方片J 黑桃A 梅花K 方片5 黑桃9 方片3 黑桃8 方片Q 红桃A 题解 2.1 代码 # Card类:一张牌 class Card: """A

面向对象思路的斗地主发牌小程序

空扰寡人 提交于 2020-10-25 10:43:53
一共54张牌 除了大小王之外,每个点数(A-K)分为四种花色:红心 黑桃 梅花 方块 Card类(id,字面点数,大小) NormalCard(花色) BossCard 2.一共三名玩家,每个玩家具备id,昵称,牌集合,是否地主,筹码* Player(id,nickname,List,isBoss) *3.洗牌(Collections.shuffle()) * 4.发牌 4.1.随机一名地主 4.2.发牌(按顺序) 4.3.剩下最后三张牌给地主 *5.显示发牌结果(根据点数大小排序显示) Player类(玩家类) public class Player { private String name; private ArrayList<Poke> handCard; private String role; { role = "农民"; } public Player() { } public Player(String name, ArrayList<Poke> handCard) { this.name = name; this.handCard = handCard; } public String getName() { return name; } public void setName(String name) { this.name = name; } public

案例:记录一则强制开库遭遇ORA-16433的处理过程

这一生的挚爱 提交于 2020-09-30 03:05:11
客户的一套开发环境,大概了解到的背景是清理空间时redo被运维人员当作log误删除,一线同事先接手处理,过程中遇到问题升级到我这里继续分析。 接手后,数据库处于mount状态,之前恢复过程中已经做过resetlogs的操作,也设置了"_allow_resetlogs_corruption"隐藏参数为true,目前直接开库会提示需要恢复,重新进行resetlogs时报错ORA-600 [2662],起初看到这个错误心中略有些放松,根据经验,推下SCN就好了: SQL> alter database open; alter database open * ERROR at line 1: ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/oradata/ODSDB/datafile/data_D-ODSDB_I-3532120983_TS-SYSTEM_FNO-1_1bujd4ob.dbf' SQL> recover database ; ORA-00283: recovery session canceled due to errors ORA-00399: corrupt change description in redo log ORA-00353: log corruption near

为什么在Python 3中“范围(1000000000000000(1000000000000001))”这么快?

假装没事ソ 提交于 2020-08-05 08:16:25
问题: It is my understanding that the range() function, which is actually an object type in Python 3 , generates its contents on the fly, similar to a generator. 据我了解, range() 函数实际上 是Python 3中的一种对象类型 ,它像生成器一样动态生成其内容。 This being the case, I would have expected the following line to take an inordinate amount of time, because in order to determine whether 1 quadrillion is in the range, a quadrillion values would have to be generated: 在这种情况下,我本以为下一行会花费过多的时间,因为要确定1个四舍五入是否在该范围内,必须生成一个四舍五入值: 1000000000000000 in range(1000000000000001) Furthermore: it seems that no matter how many zeroes I add on, the

python能开发游戏吗

空扰寡人 提交于 2020-07-28 08:03:26
python可以写游戏 ,但不适合。下面我们来分析一下具体原因。 用锤子能造汽车吗? 谁也没法说不能吧?历史上也确实曾经有些汽车,是用锤子造出来的。但一般来说,还是用工业机器人更合适对吗? 比较大型的,使用Python的游戏有两个,一个是《EVE》,还有一个是《文明》。但这仅仅是个例,没有广泛意义。 一般来说,用来做游戏的语言,有两种。一是C++。。一是C#。。 Python理论上,不仅不适合做游戏,而是只要大型的程序,都不适合。只适合写比较小型的东西,比如一个计算器,一个爬虫等。 主要有2个方面,一是速度慢,二是语法缺陷。 也许你一定觉得,Python的语法又干净,又优雅,怎么还有缺陷?但仔细想想,为什么别的语言没有这么干净?没有这么优雅?明明可以直接a=123 干嘛非要写成 int a=123;呢?难道是其他语言的设计者,都有强迫症吗?道理很简单,有得必有失。 如果数据类型,只有字符串和数字,省略掉声明变量的过程,当然不是问题。但只要逻辑一复杂,情况就完全不同了。。。游戏中,你用C#或C++写起来,大概会是这样。 技能 a=xxxx; 武器 b=xxxx; 角色 c=xxxx; 药水 d=xxxx; 音乐 e=xxxx; 而Python呢?大概是这个样子 a=xxxx b=xxxx c=xxxx d=xxxx 如果你的代码很少,显然是Python比较方便。但如果你创建几百个对象

【47】kotlin 与java的互相调用

回眸只為那壹抹淺笑 提交于 2020-07-26 23:43:05
Get/Set Kotlin自动识别java的Getter/Setter Java操作kt属性通过Getter/Setter 空安全类型 Kotlin 空安全类型的原理 java 中没有 平台类型Platform Type @Nullable 和@NotNull 几类函数的调用 kt:包级函数:静态方法 扩展方法:带Receiver的静态方法 运算符重载:带Receiver的对应名称的静态方法 几个常用注解的使用 @JvmField:将属性编译为java变量 @JvmStatic:将对象的方法编译成Java静态方法 @JvmOverloads:默认参数生成重载方法 @file:JvmName:指定Kotlin文件编译后的类名 NoArg 与AllOpen NoArg为标注的类生成无参构造 -支持 Jpa注解,如@Entity AllOpen为标注的类 去掉final,允许被继承 -支持Spriing注解,如@Component 支持定义注解类型,列入@Poke 泛型 通配符Kotlin的 [*]对应于java的[?] 协变和逆变 out/in -ArrayList<out String> 没有Raw类型 -Java的List->Kotlin 的List<*> 来源: oschina 链接: https://my.oschina.net/u/4365009/blog/4319982

Linux如何动态添加新的系统调用

家住魔仙堡 提交于 2020-05-07 12:55:50
来自 《Linux动态为内核添加新的系统调用》 先来个满满的回忆: https://blog.csdn.net/dog250/article/details/6446192 2011年写这篇文章的时候,我的女儿小小还没有出生。 评价一下这篇文章,总体写得还不错,但排版不行。时间如白驹过隙,快十年过去了,今天我来旧事重提。 添加新的系统调用 ,这是一个老掉牙的话题。前段时间折腾Rootkit的时候,我有意避开涉及HOOK劫持系统调用的话题,我主要是想来点新鲜的东西,毕竟关于劫持系统调用这种话题,网上的资料可谓汗牛充栋。 本文的主题依然不是劫持系统调用,而是添加系统调用,并且是动态添加系统调用,即在不重新编译内核的前提下添加系统调用,毕竟如果可以重新编译内核的话,那实在是没有意思。 但文中所述动态新增系统调用的方式依然是老掉牙的方式,甚至和2011年的文章有所雷同,但是 这篇文章介绍的方式足够清爽! 我们从一个问题开始。我的问题是: Linux系统中如何获取以及修改当前进程的名字?? 你去搜一下这个topic,一堆冗余繁杂的方案,大多数都是借助procfs来完成这个需求,但没有直接的让人感到清爽的方法,比如调用一个getname接口即可获取当前进程的名字,调用一个modname接口就能修改自己的名字,没有这样的方法。 所以,干嘛不增加两个系统调用呢: sys_getname:

根据call/jmp操作数偏移检测内核是否被rootkit控制

拥有回忆 提交于 2020-04-13 13:36:15
【今日推荐】:为什么一到面试就懵逼!>>> 今天上午,我写了一个检测我自己的rootkit的代码,但是那个代码只能检测hook住函数开头ftrace stub的情况: https://blog.csdn.net/dog250/article/details/105465553 手艺人不能就此罢休。我下午准备写一个x86_64指令解析器的,这样就是把内核的整个TEXT段作为一个状态机的输入,然后整个TEXT段在这个解析器里过一遍,就能把所有的call/jmp指令的操作数给过滤出来,然后判断这些操作数的偏移是不是越过了TEXT段的范围,比方说,如果callee的地址是一个内核模块地址范围的地址,那基本就可以说明内核函数call了一个 在别处的函数 ,在我看来,除了export出来的回调函数,这种情况并不多,详细检测这个callee地址,应该能看出其所以然来: 是正常的export回调函数调用吗? 是正常的kpatch打入的hotfix吗? 是恶意注入的代码吗? 无奈下午一觉醒来就快六点了,风雨大作,电闪雷鸣,时间不够了,我也就只能写下面的简单POC了: 该POC可以过滤两类hook:ftrace stub hook和ip_local_deliver里的中间hook。 代码如下: # include <linux/module.h> # include <linux/kallsyms.h

Linux系统如何隐藏一个文件?

落爺英雄遲暮 提交于 2020-04-10 07:04:21
自隐藏进程,隐藏CPU利用率,隐藏TCP连接后,现在要隐藏文件了! 关于进程隐藏,CPU利用率隐藏,TCP连接隐藏的手艺,请看: https://blog.csdn.net/dog250/article/details/105371830 https://blog.csdn.net/dog250/article/details/105394840 一般情况下,运维系统依靠CPU利用率来生成告警,CPU利用率被隐藏了,还怎么办?试想,你的挖矿进程已经把CPU跑满,且这些进程被隐藏了,且CPU利用率也被隐藏了,一切看起来很祥和,但是系统就是卡得要死…甚至风扇也被hack了… 这个时候,你需要一条TCP连接从外部控制你的进程,呃…这条TCP连接也隐藏了…此时,你需要把数据暂存在这台机器的磁盘上,如何不被发现? 呃…这就需要隐藏文件了。 经理呢?经理呢?来吧! 文件隐藏和进程隐藏,CPU利用率隐藏这些完全不同,因为文件本身并不属于操作系统的一部分,它是属于文件系统的,操作系统通过文件系统驱动以及必要情况下的磁盘驱动和文件打交道。 文件并不像进程那样,处在操作系统内存的数据结构中并被操作系统内核管理,文件是被特定文件系统管理的,每一种文件系统都有不同的文件布局格式,换句话说, 文件接受文件系统的庇护。 我们知道, 领主的领主,不是我的领主;附庸的附庸,不是我的附庸。 所以