置换python2.7.13的opcode遇到的一些坑
主要有两个坑
1.XXXSLICE相关的opcode
#define SLICE
#define SLICE_1
#define SLICE_2
#define SLICE_3 #define STORE_SLICE
#define STORE_SLICE_1
#define STORE_SLICE_2
#define STORE_SLICE_3 #define DELETE_SLICE
#define DELETE_SLICE_1
#define DELETE_SLICE_2
#define DELETE_SLICE_3
由于编译和运行的时候,这些宏定义是连续的,所以python源代码中会以SLICE+1,opcode - SLICE & 1等方式进行操作
如果置换的时候不连续,就会出问题
2.CALL_FUNCTIONXXX相关的opcode
/* The next 3 opcodes must be contiguous and satisfy
(CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1 */
#define CALL_FUNCTION_VAR /* #args + (#kwargs<<8) */
#define CALL_FUNCTION_KW /* #args + (#kwargs<<8) */
#define CALL_FUNCTION_VAR_KW /* #args + (#kwargs<<8) */
与1问题类似,ceval.c中出现(opcode - CALL_FUNCTION) & 3,所以也必须保证(CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1,且这三个宏连续
其他的参考https://zhuanlan.zhihu.com/p/25850970即可
置换python2.7.13的opcode遇到的一些坑的更多相关文章
- CentOS 6.8安装Python2.7.13
查看当前系统中的 Python 版本 python --version 返回 Python 2.6.6 为正常. 检查 CentOS 版本 cat /etc/redhat-release 返回 Cen ...
- 交叉编译Python-2.7.13到ARM(aarch32)—— 支持sqlite3
作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 环境 主机: ubuntu14.04 64bit 开发板: qemu + vexpress-a9 (参考: ...
- 交叉编译Python-2.7.13到ARM(aarch32)平台
作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 环境 主机: ubuntu14.04 64bit 开发板: qemu + vexpress-a9 (参考: ...
- Centos7.0下将Python更新到Python2.7.13
在云服务器下默认安装的python版本过低,所有我们要手动进行更新(不建议卸载老的版本,然后安装新的,这样会导致大量的异常错误) 为了防止在安装编译python时出错,需先更新gcc :yum - ...
- CentOS 6.9安装Python2.7.13
查看当前系统中的 Python 版本 python --version 返回 Python 2.6.6 为正常. 检查 CentOS 版本 cat /etc/redhat-release 返回 Cen ...
- centos7及服务器端安装python2.7.13, setuptools, pip
1. 安装python2.7.13 因为涉及到安装到服务器,所以可能不能直接在usr/bin及usr/local/bin下安装,所以本文详解安装在自定义目录下. 下载安装包: $ wget https ...
- 交叉编译Python-2.7.13到ARM(aarch64)平台
方法跟交叉编译Python-2.7.13到ARM(aarch32)平台基本一样, 不同的地方只是把工具链换成编译aarch64的工具链,这里可以参考用qemu搭建aarch64学习环境. 创建目录: ...
- CentOS7下 Python2.7.5升级为Python2.7.13
参考:https://www.jianshu.com/p/fad3942fc0ed 第一步:查看Centos版本及Python版本 • CentOS版本 [root@ tools_package]# ...
- python2.7.13环境搭建
查看当前系统中的 Python 版本,可以看到实验室的这台服务器已经安装了 Python 2.6.6 python --version 检查 CentOS 版本,我们可以看到这台服务器的 CentOS ...
随机推荐
- cookie、localstroage与sessionstroage的一些优缺点
1. Cookie 在前端开发中,尽量少用cooie,原因: (1) cookie限制大小,约4k左右,不适合存储业务数据,尤其是数据量较大的值: (2) cookie会每次随http请 ...
- hdu 5373 The shortest problem(杭电多校赛第七场)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5373 The shortest problem Time Limit: 3000/1500 MS (J ...
- UML相关说明
在java开发中,有很多时候我们是在不断的处理类与类之间关系,其中这六种关系是:依赖.关联.聚合.组合.继承.实现. 它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合& ...
- 码源中国.gitignore忽略文件配置
码源中国.gitignore忽略文件配置 ## Ignore Visual Studio temporary files, build results, and ## files generated ...
- Deep Learning基础--机器翻译BLEU与Perplexity详解
前言 近年来,在自然语言研究领域中,评测问题越来越受到广泛的重视,可以说,评测是整个自然语言领域最核心和关键的部分.而机器翻译评价对于机器翻译的研究和发展具有重要意义:机器翻译系统的开发者可以通过评测 ...
- c json实战引擎六 , 感觉还行
前言 看到六, 自然有 一二三四五 ... 为什么还要写呢. 可能是它还需要活着 : ) 挣扎升级中 . c json 上面代码也存在于下面项目中(维护的最及时) structc json 这次版本 ...
- PlantUML——1.Hello
官网: http://www.plantuml.com/ 第一步: 下载 plantuml.jar文件: 第二步:创建一个demo.txt文件(与plantuml.jar在同一目录),内容如下: @s ...
- NTP算法
网络时间协议 由特拉华大学的David L. Mills热心提供.http://www.eecis.udel.edu/~mills mills@udel.edu 由Reinhard v. Hanxle ...
- Linux文档时间戳查看和修改——stat
查看文件时间戳命令:stat awk.txtFile: `awk.txt'Size: 20 Blocks: 8 IO Block: 4096 regular fileDevice: 801h/2 ...
- Kiggle:Digit Recognizer
题目链接:Kiggle:Digit Recognizer Each image is 28 pixels in height and 28 pixels in width, for a total o ...