`
文章列表
1、下载masm 6.11安装程序,这是microsoft开发汇编开发环境,包括可视化开发工具,汇编工具masm,连接工具link.exe,调试工具debug.exe。当然这里也可以安装更高级版本的masm,但是要求比较多,还要装visual c++什么乱起八糟的工具,简便起见,就用6.x版本玩玩也够了;   2、设置环境变量,在path中添加%MASM_HOME%\BIN;%MASM_HOME%\BINR,只设置BIN是不够的,比如link.exe就在BINR目录下;   3、启动控制台,在dos下用edit命令启动编辑器,编辑一个汇编语言代码,保存,比如add.asm;   ...
  /** * In live var analysis a BB asks its successor (in essence) about which * vars are live, mixes it with its own uses and defs and passes on a * new list of live vars to its predecessors. Since the information * bubbles up the chain, we iterate the list in reverse o ...
        小于1.5编译级别时,如果不显示inline try/catch/finally块,try/catch和any会产生的jsr指令跳转到finally。此处分析kilim如何对这种情况下的jsr指令进行内联:finally块中有pausable则会被拷贝一份;finally块中有pausable则会把jsr/ret指令都替换为goto指令,但是并没有像1.5及以后编译级别那样,拷贝一份代码try/catch代码块编译后的指令块中。下面看下analyze中调用的kilim.analysis.MethodFlow.inlineSubroutines()的实现: privat ...
        上一篇分析了可织入判断的代码,本篇继续分析织入部分的构造/合并BasicBlock。         首先看下分析方法kilim.analysis.MethodFlow.analyze()包含的功能: //织入逻辑 public void analyze() throws KilimException { buildBasic ...
1、织入入口,配置     1.1、织入入口          kilim.tools.Weaver是织入的主类,通过程序参数设置要织入的代码路径,可以是class文件、jar包、其他(是什么)、目录(目录中可以是jar包、class文件)。         如果传入的是class文件,会直接织入;调用kilim.tools.Weaver.weaveFile(String, InputStream, Detector)织入         如果是jar包,会解析jar文件,for循环时候,jdk会把for编译成iterator接口实现,对于jar文件,实际提取文件内容的是kilim. ...
        先上一段很简单,且不考虑健壮性的源码: import java.io.FileInputStream; import java.io.IOException; public class TryCatchFinallyTest { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { FileInputStream fips = null; try { fips = new ...
        继第一篇,我们来看看readCode的代码: private void readCode(final MethodVisitor mv, final Context context, int u) { // reads the header byte[] b = this.b; char[] c = context.buffer;//这个buffer长度为maxStringLength int maxStack = readUnsignedShort(u);//maxStack值 ...
        在深入分析ClassReader.readCode()方法之前,我们需要大概了解下ASM把jvm的指令分的类型,这在readCode会用到。先看ClassReader的代码: static { int i; byte[] b = new byte[220]; String s = "AAAAAAAAAAAAAAAABCLMMDDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAADD" + "DDDEEEEEEEEEEEEEEEEEEEEA ...
       了解java class文件格式是读懂asm代码的前提,所以在此之前请找Java虚拟机规范里边class文件格式章节细读一下。         不过在详解读入过程之前,先简单看下jvm规范中对class文件格式的定义,其中一个u代表一个byte,u1 ...
 java语言处理多任务的模式是基于多线程,java语言级别原生并不支持协程,我们想要java语言支持协程,就需要在线程和协程之间架起一道桥梁。在某个事件点(我们成为挂起点)上,我们在应用级别备份当前任务在线程上的调用栈信息(包括局部变量和操作栈上的数据),释放线程,让它去执行下一个任务;等某些事件被触发的时候,重新执行刚才的任务,用之前备份的调用栈信息恢复线程的调用栈,从挂起点开始执行。 来看看Kilim是如何实现标示出挂起点、识别出需要备份的调用栈、备份/恢复调用栈、任务的唤醒这些功能的: 1、标识挂起点,kilim框架通过 kilim.Task.pause(kilim.Pause ...
因为好多年没做web开发,所以也一直木有关注JEE新版本的特性了。虽然老早听说Servet3.0可以异步化了,但是一直米有写过例子来跑过。最近思考异步化问题偏向于jvm层面如何保存执行中的栈和恢复栈,对异步化整体缺乏整理的考虑。 现在想来,天天面对的系统主要是接受请求,处理,发起一堆远程调用,接受远程调用结果,处理,构造响应结果,输出,没有太多深层次的业务处理。细化下去就要考虑接受请求、发起远程调用、接受调用结果、构造响应结果这块了。先从接受请求这块开始,就先了解下Servlet的异步化吧。 昨天查了下Servlet3.0的资料,写了个例子,惊奇的发现,竟然不用配置web.xml。虽然从原理 ...
今天收到系统一问题,在IE8/IE7从某系统跳转到我们系统的时候,会出现404,刷新之后就正常打开我们系统页面了。如果第二次点连接跳转到我们系统,是正常打开我们系统页面的。 后来仔细分析发现,第一次跳转过来的时候,存在我们系统的自动登录过程,期间有一堆302。而刷新或者第二次再跳转,由于少了认证过程,302次数少很多,就直接显示了我们系统页面,没有出现404。仔细数了下在没有登录我们系统时候302的次数,是9,所以猜测是不是浏览器做了限制。换了chrome仍然出错,换了FireFox竟然是好的。 于是就google了一把,发现还真是!但是这文章里只列出了FireFox可以通过about ...
浏览器中,Cookie分为两类,Session Cookie和持久化Cookie。 如果在创建Cookie的时候,只设置了key和value,则是Session Cookie;如果 创建 Cookie的时候,不仅设置了key/value,同时设置了Cookie的生存时间,则这样的Cookie是持久化Cookie。 以下是java中创建Session Cookie和持久化Cookie的方式: //Session Cookie Cookie sessionCookie = new Cookie("s", "session"); //持久化Cooki ...
eclipse内存设置了很大,使用一段时间之后Old Gen频繁GC,CPU使用率很高,Eclipse反应非常慢。网上搜了下竟然没搜到内存泄露的问题,对面哥们儿的也是反应慢。难道是我这里设置有问题?
今天在用maven--我很落伍啊,以前公司只用Ant--在拉包的时候,遇到了OOM异常:   java.lang.OutOfMemoryError: Java heap space 本以为在电脑的环境变量里设置JAVA_OPTS为下值可以解决问题,设置完后又试了一次,不行。看来这个参数只用作java命令启动的设置了。   -Xms256M -Xmx768M 网上搜了下,看到可以通过修改%M2_HOME%\bin目录下的mvn文件来解决,我懒得直接改这个文件,如果以后换版本了还要改,所以想换种方法。 打开mvn文件后看到有个MAVEN_OPTS变量,于是在电脑环境变量里加了这个变量, ...
Global site tag (gtag.js) - Google Analytics