案例分享:如何通过JVM crash 的日志和core dump定位和分析Instrument引起的JVM crash

1. JVM crash了产品发来一份crash report, 什么是crash report请参考我的前期博客(http://blog.csdn.net/raintungli/article/details/7642575),下面是截取了crash report的部分,用于分析:# Problematic frame: # V [libjvm.so+0x5bbf05] instanceKl...
阅读(562) 评论(0)

Struts2远程命令执行漏洞 S2-045 源码分析

Struts2 又爆OGNL的高危漏洞S-045,又是OGNL的漏洞 漏洞分析 在上传文件里,Struts使用的是common upload 的上传组件, 为了能被action访问到上传的文件,通常会重新封装request,  Spring也是这么做。 JakartaStreamMultiPartRequest.java中 public void parse(HttpServletReq...
阅读(5729) 评论(3)

CVE-2016-1000031 Apache Commons FileUpload 反序列化漏洞深入分析

反序列化漏洞最近一直不得安宁,先有Apache Commons Collections通过反序列化实现远程代码执行,再有Spring RMI 反序列化漏洞,最新又有了common upload file的反序列化漏洞CVE-2016-1000031(https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1000031) 漏洞原因 先来看...
阅读(2486) 评论(0)

Java 8 动态类型语言Lambda表达式实现原理分析

Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标。...
阅读(3223) 评论(4)

Java Instrument (六) 动态重定义Class

在上篇博客(http://blog.csdn.net/raintungli/article/details/51646556)中提到了在on_attach的方式上如何重新定义class,里面也提到了最后attach时候会调用我们自定义的agent class的agentmain方法,在看Instrumentation的接口,里面本身提供了redfineClasses的方法 也就是agentmai...
阅读(1826) 评论(1)

Java Instrument (五) Agent attach

首先先参考笔者前期的博客(http://blog.csdn.net/raintungli/article/details/7034005),先了解在jvm启动的过程中的两个线程Signal Dispatcher和Attach Listener 在博客中,已经探讨了在Attach Listener 的线程在linux环境中创建了socket的文件,接着我们的关注点讲成为客户端如何写这个文件。...
阅读(1337) 评论(0)

Java Instrument (三) 钩子函数

Java Instrument (三) 钩子函数...
阅读(1058) 评论(0)

Java Instrument (二) JVMTI

Java Instrument (二) JVMTI...
阅读(1505) 评论(0)

Java Instrument(一) Java Agent

1  Agent Agent在java中本质是一个动态库,利用JVMTI暴露出来的一些接口实现逻辑的入侵,需要实现如下的一个或者多个函数: JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved); JNIEXPORT jint JNICALL Agent_OnAttach(JavaV...
阅读(1874) 评论(0)

java中的SecureRandom在linux中的实现

在安全系统中,通常我们会使用securerandom去更安全的生成随机数,而默认的SecureRandom里使用的算法是SHA1PRNG。   Linux中的随机数发生器 在Linux操作系统中,有一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。 /dev/random 在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的...
阅读(12788) 评论(5)

Linux下关于TCP的keep alive的实现源码分析

TCP下的Keep Alive 我们常说的TCP的keep alive,就是为了保证连接的有效性,在间隔一定的时间发探测包,根据回复来确认该连接是否有效。通常上层应用会自己提供心跳检测机制,而Linux内核本身也提供了从内核态确保连接有效性的方式。 在sock 函数中可以设置是否需要打开keep alive开关,默认建立socket 是关闭keep alive的。代码如下 opt...
阅读(2805) 评论(0)

不要在linux上使用java 7 Files的接口参数StandardOpenOption.DELETE_ON_CLOSE

最近在看安全代码规范建议中提到关于如何删除创建的临时文件,推荐使用jdk7中的Files的函数,通过参数StandardOpenOption.DELETE_ON_CLOSE来控制 代码示例 BufferedWriter writer = Files.newBufferedWriter(tempFile, Charset.forName("UTF8"), StandardOpenOption.D...
阅读(1705) 评论(0)

自己动手编译hsdis

HSDIS 是hotspot 的一个工具,用于能够da yin...
阅读(2192) 评论(0)

Java (JDK7)中的String常量和String.intern的实现

Java中的String常量和String.intern的实现...
阅读(6488) 评论(4)

linux上TCP connection timeout的原因查找

最近在产线上经常出现connection timeout的问题...
阅读(17500) 评论(0)

ThreadMXBean 打出堆栈信息原理分析

我们通常会使用工具jstack 去跟踪线程信息,其如何实现使用attach 的方式还是ptrace 的方式,这些可以去参考本人的博客的其他文章。 但这些方式都是外部使用的方式,如何直接使用java代码得到当前进程的线程的信息,方便监控jvm的整个运行状态,就不的不提到了ManagementFactory 通过调用方法 ThreadMXBean tmbean = ManagementFacto...
阅读(3612) 评论(2)

java JNI 实现原理 (六) 调用JNI方法

在前面的博客中提到过调用的JNI的entry是generate_native_entry,也就是说方法generate_native_entry是最终调用的我们的c++写的库文件里的方法...
阅读(3067) 评论(0)

java JNI 实现原理 (五) JNI方法解释调用

Hotspot主要有两种解释器,而下面我们主要讨论的是 Template Intepreter也叫asm interprete解释器, 文章下面的介绍基本都是基于template解释器 我们举一个invokespecial的例子,下面是templateTable方法解释invokespecial的代码 void TemplateTable::invokespecial(int byte_no)...
阅读(2675) 评论(1)

java JNI 实现原理 (四) 初始化JNI方法

在调用函数的时候都会在template 解释器中会使用 invokespecial  -> prepare_invoke -> load_invoke_cp_cache_entry -> resolve_cache_and_index 在代码中我们可以看到 case Bytecodes::_invokevirtual: case Bytecodes::_invokespeci...
阅读(2958) 评论(1)

java JNI 实现原理 (三) JNI中的RegisterNatives方法

我们常用javah去生成JNI的头文件,然后去实现自己定义的JNI方法,使用这种方式比较传统,但是我们可以看到定义的格式甚至连名字都必须按照规范 JNIEXPORT jint JNICALL Java_test_symlink (JNIEnv *, jobject, jstring, jstring); 完整的结构是Java_classpath_classname_native m...
阅读(7805) 评论(0)
52条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:447829次
    • 积分:5051
    • 等级:
    • 排名:第6110名
    • 原创:97篇
    • 转载:3篇
    • 译文:0篇
    • 评论:72条
    最新评论