chainhelen

nodejs 编译debug

下载源码 遇到问题 1.按照文章上来说,执行vsbuild.bat,set PYTHON=c:\python27\python.exe",但是没有任何反应,并且没有错误显示 注释掉 vsbuild.bat第一行 @echo off发现,错误是执行到run-python`,顺藤摸瓜脚本第550行,找到tools\msvs\find_python.cmd 2. 直接运行find_python.cmd,发现什么反应都没有,同样注释掉第一行 打印出"C:\Program Files\Python35\python.exe" -V 2>&1 | findstr /R

By chainhelen

mysql

奇怪的mysql慢查询

线上问题 目前还没有未知根本缘由,线上跑了一个月左右,数据库这张表,大约有80万数据 当发生order by 和 limit 同时作为条件时,查询速度下降到3秒以上 表基本信息 首先利用 pager cat /dev/null; nopager; pager 只影响单次链接 介绍一下表的情况,id 是 唯一索引, rid(下面没用到) 是主键索引,status 是普通字段 查看表索引,可见 mysql> show index from 10000_web \G; *************************** 1. row *************************** Table: 10000_web Non_unique: 0 Key_name: PRIMARY

By chainhelen

js

js 匿名函数 箭头函数

关于new 首先回顾一下new关键字 var ch = new Fa(); 等价于 var ch = {}; ch.__prototype__ = Fa.prototype; Fa.call(ch); 本质上call的第一个参数可以理解传入了一个this,改变了整个上下文 本文事例 运行环境 nodejs v7.7.2 拿一段观察者模式的代码来看 //js文件 function Event() { this.handlers = {}; } Event.prototype.on = function(type, cb) { //exception handler, need to code if("undefined" == typeof this.handlers[type]) { this.

By chainhelen

逆向

脱壳小试

前言 关于IDA的中文教程确实少,没有实例甚至讲解,都是自己琢磨的 本文是我按照网上其他人写的用ollydbg脱壳思路,这里尝试使用ida pro进行脱壳,该crackme在其他地方并没有脱壳教程 crackMe 前面有一节的TBM crackMe 逆向 是直接跳过脱壳部分,这一节补一下 ESP定律 ESP定律就是利用堆栈平衡的原理,迅速找到OEP(真实的程序入口) 通常的壳会把一些真实程序运行的资源进行压缩,等到压缩程序运行起来的时候,先进行解压,再跳到OEP的继续运行真实程序 在解压之前需要把当前环境进行保存,例如寄存器esp,那么在此下硬件断点,当压缩程序尝试恢复该寄存器值时,必然会去访问该保存,此时就能被前面的断点断住 环境 win10 ida pro Version 6.8.150423 (64-bit) crackMe TBM scylla x64 v0.9.7c PEID V0.95.EXE(可选)

By chainhelen

逆向

crackme 一只老虎

环境 看雪论坛的附件,其中序列号的第二题 IDA PRO 破解版 Version 6.8.150423 (64-bit) 入口 首先输入任意字符串注册注册名 : qianhailong ; 注册码 : longlong 点击注册,显然因为输入有问题错误而没有任何弹窗 拖入IDA PRO,断点调试,首先需要找到入口 思路一,尝试寻找类似GetDlgItemTextA获取字符串的导入函数 ,并没有什么发现,只有可疑的GetWindowTextA、GetWindowTextW、GetKeyNameTextA 先此几处下断点,此时看到的现象是多种事件行为都会触发这几个函数,例如click、 focus等,难以调试 思路二,寻找关键字符串,view -> open subviews -> strings 或者 热键shift+F12,然而也没有什么线索,还有几处中文乱码不清楚是什么 思路三,点击事件,在Functions

By chainhelen
crackme TBM

逆向

crackme TBM

环境 看雪论坛的附件,其中序列号的第一题 IDA PRO 破解版 Version 6.8.150423 (64-bit) 含有下文注释的ida pro数据文件 过程 (跳过UPX脱壳过程) 首先在界面中输入Name,和Serial,发现错误的情况并不会有弹窗 拖入IDA,可见Functions View 导入表中含有GetDlgItemTextA,那么在此处DLL设下断点 输入Name: woshi; Serial : 1234567运行触发 触发点断后,返回上一层CR-F7 或者 Run until Return seg019:00401539 call GetDlgItemTextA seg019:0040153E mov ebx, eax seg019:00401540 or ebx, ebx ; 验证Name填入不可为空

By chainhelen

LCA

LCA

最近共同祖先 看题 从1到n标号的城市,m条含有权重边,c次询问任意两城市之间的最小加权路径 思路 不是一棵树(这里应该是环)上的,思路很简单,用并查集即可判断 同一棵树上的,可以采用 Tarjan 离线算法 核心伪代码 for(int i = 1;i <= n;i++) { if(!vis[i]) { LCA(i); } } void LCA(int u) { father[u] = u; //重新指定自己 vis[u] = 1; //标记已经完成扫描 for(int i = head[u]; i != -1; i = edge[

By chainhelen

mq

rocketmq 初试

环境 个人电脑 win10、jdk1.8.0_121、idea2.6.2、rocketmq4.0.0-incubating、mvn3.3.9 下载源码 一开始下载rocketmq的源码3.5.8,但是导入idea编译报错 Error:(34, 8) java: com.alibaba.rocketmq.broker.plugin.MockMessageStore不是抽象的, 并且未覆盖com.alibaba.rocketmq.store.MessageStore中的抽象方法lockTimeMills() 猜测是jdk版本问题,我没有解决 选择了新的版本4.0.0-incubating 导入idea 选择 File -> New -> Project

By chainhelen

java

chlang 初版

关于chlang 这是个玩具解释器,通过完成它学习了许多关于编译器前端的知识点 github地址 本来这是个c语言项目,由于c语言实现实在过于繁琐,遂弃坑转为java,采用maven的项目管理结构 本语言主要参考了《自制编程语言》、c4的源代码 本文更新于2017.06.21 词法分析 词法分析器所在代码 主要有三个java文件构成,不讲一些自动机相关知识,默认已知 TOKEN_TYPE.java 1. 主要描述符号类型,带有RW开头的表示Reserved Word,也就是保留关键词 2. 最早期的开发比较简单,并没有 '>=' 这类的关系运算符,不会跟'='冲突产生太多的lookhead,这一部分是之后才加上的 3. 语言中只支持两种基础数据类型,整型(int)和字符串(string),当然为了实现闭包,还有函数这个数据类型,但不在这里体现 TOKEN.java

By chainhelen
语言的流程控制

编译器

语言的流程控制

问题 最近在写一个解释器,碰到一个关于控制流程问题,有感而发 起初我按照bnf范式写了一堆生成抽象语法树的代码,在eval.java中准备从tree root出发进行遍历计算每一个表达式(解释语句)。其中有一个核心函数recursionEvalAstNode每次递归传入每个节点(的子节点)。所以函数这个参数就是树上的节点parentAstNode。那么问题来了 包含一些控制流程的语句(break、continue、return,但if不是很明显) 比如说的return statement,一旦执行到这里,就应该退回wrap-function执行的地方,并把返回节点interpret result(可能是含有子节点的expression节点)存储在栈或者寄存器里"带出去",另一方面上叙采用的是用递归计算方式,return statment的同级 next sibling node还在上一层的递归里面呢,怎么告诉上一层它不用算了 图形结合 没有图!!! 题外话 这里可以看到,我在设计recursionEvalAstNode其实只想到了context-fre

By chainhelen