info

记录一次python3.7反编译过程

浪尽此生 提交于 2020-02-03 00:00:43
记录一次python3.7反编译过程 1.将exe文件转换成pyc文件 2.修复pyc文件 3.如何得到magic number 4.添加magic number 5.反编译pyc文件 找到了一个python3.7编译的exe,但没找到源码,记录一下反编译的过程 1.将exe文件转换成pyc文件 使用pyinstxtractor.py,cmd中输入命令: python pyinstxtractor . py xxx . exe 项目地址: pyinstxtractor 解压成功后,同路径下会出现一个[xxx.exe]_extracted的文件夹,这里面就包含了主程序main,不带任何后缀,我们要反编译的就是这个文件,其他的都是依赖库,如PYZ-extracted文件夹里的都是库文件。我们这时可能会纳闷,为什么该文件不是.pyc文件?这可能是pyinstxtractor的一点不足,转换出来的主程序格式不对,我们还需要对其进行手动修复。 2.修复pyc文件 直接把main文件改后缀为main.pyc进行反编译会出现错误。 C : \Users\zzzz > uncompyle6 xxxx . pyc Traceback ( most recent call last ) : File "C:\python3\Lib\site-packages\xdis\load.py" , line

Android之SharedPreferences数据存储

♀尐吖头ヾ 提交于 2020-02-02 18:34:19
一、SharedPreferences保存数据介绍   如果有想要保存的相对较小键值集合,应使用SharedPreferences API。SharedPreferences对象指向包含键值对的文件并提供读写这些文件的简单方法。每个SharedPreferences文件由框架进行管理并且可以专用或共享。   SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstancesState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存。   处理方式:SharedPreferences类似过去的Windows系统上的ini配置文件,但它分为多种权限,可以全局共享访问 ,Android提示最终是以xml方式来保存,整体效率来看不是特别高,对于常规的轻量级而言要比SQLite要好不少如果真的存储量不大可以考虑自己定义文件格式。Xml处理时Dalvik会通过自带底层的本地XML Parser解析,比如XML pull方式,这样对于内存资源占用比较好。它的本质是基于xml文件存储key-value键值对数据,通过用来存储一些简单的配置信息。其存储位置在/data/data/<包名>

【openstack】devstack 如何成功复制

怎甘沉沦 提交于 2020-02-02 14:07:47
概述: 在应用devstack时,有时会遇到下面的场景从一台安装成功的devstack服务器上复制devstack 到一台全新的服务器上。当然可以通过虚拟机复制来实现,本文介绍通过手工迁移devstack的方式进行迁移,并最大化减少软件下载时间。 1. 迁移准备 步骤1: 操作系统准备 准备一台安装相同的操作系统版本的服务器 修改国内软件源,并进行软件升级 个人建议:推荐使用阿里源,速度快些,但是从稳定性来说还是清华源。 # 具体修改源的方法参考链接 更新源和软件 apt update apt -y upgrade 重新安装部分软件 apt-get install python-dev apt-get install python-pip pip install --upgrade pip pip install -U os-testr #原因见附录 步骤2:【旧服务器】迁移软件准备 stack 整个目录,包括 tar -zcvf stack_ocata.tar.gz /opt/stack/ python软件相关软件目录 cd /usr/local/lib/ tar -zcvf python_2.7.tar.gz python2.7 注意:迁移该目录下的文件,目的是减少与pip源的交互,减少下载文件的时间 cd /usr/local/bin tar -zcvf local_bin

typeid详解

回眸只為那壹抹淺笑 提交于 2020-02-02 09:24:33
在揭开typeid神秘面纱之前,我们先来了解一下 RTTI (Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。 dynamic_cast允许运行时刻进行类型转换,从而使程序能够在一个类层次结构中安全地转化类型,与之相对应的还有一个非安全的转换操作符static_cast,因为这不是本文的讨论重点,所以这里不再详述,感兴趣的可以自行查阅资料。下面就开始今天我们的话题:typeid。 typeid 是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为 type_info 的标准库类型的对象的引用(在头文件typeinfo中定义,稍后我们看一下vs和gcc库里面的源码),它的表达式有下图两种形式。 如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。 ISO C++标准并没有确切定义type_info,它的确切定义编译器相关的

python笔记06

你离开我真会死。 提交于 2020-02-02 02:57:29
python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转。 v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1=v1[::-1] sort v1 = [11,22,3111,32,13] print(v1) # v1.sort(reverse=False) # 从小到大(默认) # v1.sort(reverse=True) # 从大到小 # print(v1) 字典 keys/values/items info = {'k1':'v1','k2':'v2'} for x1,x2 in info.items(): print(x1,x2) for item in info.items(): print(item) for k in info.values(): print(k) for x in info.keys(): print(x) 输出: k1 v1 k2 v2 ('k1', 'v1') ('k2', 'v2') v1 v2 k1 k2 get info = {'k1':'v1','k2':'v2'} # v1 = info['k1']#k1无值,会报错. # v2 = info.get('k1') # 如果k1无值,返回None给v2. # v3 = info.get('k1'

C++ typeid实现原理

别来无恙 提交于 2020-02-02 01:04:07
最近看了boost::any类源码,其实现主要依赖typeid操作符。很好奇这样实现的时间和空间开销有多大,决定探一下究竟。 VS2008附带的type_info类只有头文件,没有源文件,声明如下: [cpp] view plain copy class type_info { public: virtual ~type_info(); _CRTIMP_PURE bool __CLR_OR_THIS_CALL operator==( const type_info& rhs) const; _CRTIMP_PURE bool __CLR_OR_THIS_CALL operator!=( const type_info& rhs) const; _CRTIMP_PURE int __CLR_OR_THIS_CALL before( const type_info& rhs) const; _CRTIMP_PURE const char* __CLR_OR_THIS_CALL name(__type_info_node* __ptype_info_node = &__type_info_root_node) const; _CRTIMP_PURE const char* __CLR_OR_THIS_CALL raw_name() const; private: void *_m

C++中的类型判断typeid()操作与java中的 instanceof 做比较

烈酒焚心 提交于 2020-02-02 00:52:16
这是RTTI(运行阶段类型识别)的问题,c++有三个支持RTTI的元素: 1. dynamic_cast 操作符 如果可能的话,dynamic_cast操作符将使用一个指向基类的指针来生成一个指向派生类的指针;否则,该操作符返回空指针。这是最常用的 RTTI组件,它不能回答“指针指向的是哪类对象”这样的问题,但他能回答“是否可以安全地将对象的地址赋给特定类型的指针”这样的问题。如: class A{} class B: public A{} class C: public B{} 然后有下面的指针: A *a = new A; B *b = new B; C *c = new C; 则: C *cc1 = dynamic_cast<C*>(c); //安全 C *cc2 = dynamic_cast<C*>(a); //cc2是空指针 C *cc3 = dynamic_cast<c*>(b); //cc3是空指针 B *bb = dynamic_cast<C*>(b); //安全 注:只能将此RTTI用于包含虚函数的类层次结构,原因在于只有对于这种类层次结构,才应该将派生类对象的地址赋给基类指针。 2. typeid操作符 3. type_info结构,(须包含头文件<typeinfo>) class A{} class B: public A{} class C: public

Zabbix监控PHP-FPM、Tomcat、Redis应用实战案例

做~自己de王妃 提交于 2020-02-02 00:35:12
一、Zabbix监控PHP-FPM应用实战 Nginx+PHP-FPM是目前最流行的LNMP架构,在基于PHP开发的系统下,对这些系统性能的监控,主要是关注PHP-FPM的运行状态,那么什么是PHP-FPM呢?PHP-FPM是一个PHP FastCGI管理器,它提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,对于ZPHP5.3.3之前的PHP来说,它是一个补丁包,而从PHP5.3.3版本开始,PHP内部已经集成了php-fpm模块,意味着被PHP官方收录了。在编译PHP时需指定参数“--enable-fpm”来开启PHP-FPM。 1)启用php-fpm状态功能 操作如下: 1)安装nginx [root@agent ~]# yum -y install zlib pcre pcre-devel openssl openssl-devel [root@agent ~]# wget http://nginx.org/download/nginx-1.14.1.tar.gz [root@agent ~]# tar zxf nginx-1.14.1.tar.gz -C /usr/src [root@agent ~]# cd /usr/src/nginx-1.14.1/ [root@agent nginx-1.14.1]# ./configure -

Hadoop集群大数据解决方案之IDE配Maven实现MapReduce 程序实战(五)

a 夏天 提交于 2020-02-01 23:26:58
准 备    关于mapreduce的原理,说的再天花乱坠,也还是原理,如图1,用程序练习一个简单的word count程序,采用IDE+Maven简单的撸一把,下一篇博客可以搞点有趣的,哎呀,不得不说Maven这个东西真是太好用了,想起以前手动导依赖的Jar包,简直苦不堪言。 图1 mapreduce wordcount 图谱 测试数据如下,在集群hdfs上/tmp/wcinput/wordcount.xt下文件: hello myname hadoop world lau hello map hdfs spark hive reduce map zookeeper world word log hdfs myname hive hi lau 编写项目 表1 Java数据类型和Writable类型对比 Java基本类型 Writable实现 序列化大小(字节) boolean BooleanWritable 1 byte ByteWritable 1 short ShortWritable 2 int IntWritable 4 int VintWritable(可变长) 1~5 float FloatWritable 4 long LongWritable 8 long VlongWritable(可变长) 1~9 double DoubleWritable 8 String

intel core 2 duo温度读取

≡放荡痞女 提交于 2020-02-01 19:37:44
1 目的:实现intel core 2 duo cpu的温度检测 2 分析: 对于intel处理器,每个处理器核心有Digital Thermal Sensors(DTS 数字敏感传感器),该数字传感器的检测值不依赖于外围电路,仅仅取决于 cpu核心的热度,其取值存储于cpu上的一个特殊寄存器中,该寄存器称为Model Specific Register 0x19c(MSR),可以通过rdmsr指令读取,内核代码coretemp.c文件实现了该文件的读取,插入coretemp.ko模块后,可以通过/sys/devices/platform/coretemp.0/目录下的temp1_input、temp2_input等文件读取,温度值基本与lm-sensors读取值一致(lm-sensors基于该内核驱动模块实现的)。 3 hwmon/coretemp.c文件导读, 注:该检测文件的对应文档信息在/documation/hdware/coretemp文件下 3.1 前期工作 对于intel core 2 duo cpu而言,coretemp.c中包含特定架构的头文件为x86/include/asm/process.h 在process.h中定义了cpu_data数据结构: 1 DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info); 2