主要有两个坑

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即可

最新文章

  1. N-Queens
  2. 【转】Cookie和Session区别和联系详解
  3. New XAMPP security concept:错误解决方法
  4. Linux上服务的启动,停止和重启
  5. 【android studio】解决android studio drawable新建项目时只有一个drawable目录的问题
  6. [转] Makefile经典教程(掌握这些足够)
  7. 如何在我们项目中利用开源的图表(js chart)
  8. MFC控件随窗口大小变化原理及实现
  9. php检查漏洞防护补丁-防护XSS,SQL,文件包含等多种高危漏洞
  10. Windows 8.1 正式版镜像下载大全
  11. CodeForces 614D Skills
  12. C# RichTextBox 滚动条 滚动到最新行
  13. python捕获异常及方法总结
  14. javascript 飞机大战完整代码
  15. Blender软件基本介绍(3D建模软件)
  16. hdu 6199 gems gems gems dp
  17. 20155334 《网络攻防》 Exp6 信息搜集与漏洞扫描
  18. jQuery漏掉的东西
  19. 【Coursera】Seventh Week
  20. js之表单记忆功能

热门文章

  1. koa源码阅读[1]-koa与koa-compose
  2. TinyOS 代码分析
  3. 服务器部署之nginx的配置
  4. nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)
  5. 一个python爬虫工具类
  6. C#开发微信公众平台开发-微信海报介绍和开发流程
  7. Tomcat: Connector中HTTP与AJP差别与整合
  8. CGIC简明教程(转摘)
  9. beego学习笔记(4):开发文档阅读(2)
  10. Spring学习-理解IOC和依赖注入